AJAX培训笔记_js基础笔记

AJAX培训笔记_js基础笔记7.10——–Ajax:AsynchronousJavaScriptAndXML异步的JavaScript和XML1:编写ajax遵守基本标准习惯标签名全小写,标签必须有结束标签,属性名必须小写,属性值必须位于“”或”内2:创建ajax服务端代码:AjaxServer.java和普通的servlet类似,区别在于,普通servlet返回的是页面,而a

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

7.10
--------
Ajax:Asynchronous JavaScript And XML
异步的 JavaScript 和 XML
1:编写ajax遵守基本标准习惯
标签名全小写,标签必须有结束标签,属性名必须小写,属性值必须位于“”或''内
2:创建ajax服务端代码:AjaxServer.java
和普通的servlet类似,区别在于,普通servlet返回的是页面,而ajax返回的
是我们想要的数据
ajax框架:dwr,dojo,ext,prototype,jquery
3、编写页面:ajax.html
A:编写js:verify.js
B:在页面中引入该js
4、精简js:verify.js--->verify1.js
5、不使用jquery框架,直接使用ajax的异步对象XMLHttpRequest对象去实现ajax应用
步骤:
A:创建XMLHttpRequest对象
B:注册回调函数
C:设置连接信息
D:发送数据到服务端进行交互
E:接受数据
创建js:verifyown.js
相关代码:
------------
var xmlHttp;
function verify()
{
//使用dom方式获取username的值
var username = document.getElementById("username").value;
//A:创建XMLHttpRequest对象
xmlHttp = getXMLHttpRequest();
//判断该异步对象是否创建成功
if(xmlHttp)
{
// B:注册回调函数
xmlHttp.onreadystatechange = callback;
// C:设置连接信息
xmlHttp.open("get","ajaxServer?username="+username,true);
//D:发送数据到服务端进行交互
xmlHttp.send(null);
//xmlHttp.open("post","ajaxServer",true);
//设置请求头
//xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//xmlHttp.send("username="+username);
}
}
//D:发送数据到服务端进行交互
function callback()
{
//判断数据是否交互完成
if(xmlHttp.readyState == 4)
{
//判断http交互是否成功
if(xmlHttp.status == 200)
{
//返回响应数据
//alert(xmlHttp.responseText);
var text = xmlHttp.responseText;
//alert(text);
document.getElementById("result").innerHTML = text;
}
}
}
//A:创建XMLHttpRequest对象
function getXMLHttpRequest()
{
var xmlHttp = null;
try
{
//FF Safari Opera IE
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
try
{
//IE 5,6
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
6:接收返回值类型为xml格式的数据
A:AjaxServer.java--->AjaxXMLServer.java
B:配置web.xml
c:verifyown.js--->verifyXML.js
function callback()
{
//判断数据是否交互完成
if(xmlHttp.readyState == 4)
{
//判断http交互是否成功
if(xmlHttp.status == 200)
{
//返回响应数据 xml返回的是个对象
//alert(xmlHttp.responseText);
var xml = xmlHttp.responseXML;
//var xml = xmlHttp.responseText;
//alert(xml);
var msgs = xml.getElementsByTagName("message");
if(msgs.length > 0)
{
textNode = msgs[0].firstChild;
//alert(textNode.nodeValue);
var msg = textNode.nodeValue;
//alert(msgs.length);
document.getElementById("result").innerHTML = msg;
}
else
{
alert("xml数据解析错误,原始内容为:"+xmlHttp.responseText);
}
}
}
}
7.11
------------
7、使用jquery的ajax方法实现文本数据的返回
verify.js---->verifyJquery.js
$.ajax({
//type:"get",
//url:"ajaxServer?username="+username,
type:"post",
url:"ajaxServer",
data:"username="+username,
success:function(data)
{
//alert(data);
$("#result").html(data);
}
});
8、使用jquery的ajax方法实现xml数据的返回
verifyJquery.js---->verifyJqueryXML.js
$.ajax({
//type:"get",
//url:"ajaxServer?username="+username,
type:"post",
url:"ajaxXMLServer",
data:"username="+username,
dataType:"xml",
success:callback
});
function callback(data)
{
//dom--->jquery $(dom)
//jquery-->dom jquery.get(0)
var jqueryObj = $(data);
var msgs = jqueryObj.children();
var text = msgs.text();
$("#result").html(text);
}
9、缓存问题:
FF每次都发送请求。IE到哪个请求路径一样时,会调用缓存
解决方案:时间戳
function convertURL(url)
{
var timestamp = new Date().getTime();
//将该时间戳加到url上
if(url.indexOf("?") >= 0)
{
url += "&t="+timestamp;
}
else
{
url += "?t="+timestamp;
}
return url
}
简单的Math.Random()
var url = "ajaxServer?username="+username+"&t="+Math.random();
10、解决中文乱码问题
get/post
//服务器端解码一次
username = URLDecoder.decode(username, "utf-8");
//在js端编码2次
username = encodeURI(username);
username = encodeURI(username);
字节码编码的原理:
在文本框中输入“中”
11:jQuery部分方法练习
test1.html
-------
//1、简单:伪类
//:first
var firstul = $("ul:first");
//alert(firstul.get(0).id);
//:last
var lastul = $("ul:last");
//alert(lastul.get(0).id);
var ul = $("ul").get(1);
//alert(ul.id);
//:not
//var notul = $("ul:not");
var notul = $("#newsList li:not(.highlight)");
//alert(notul.length);
//alert(notul.text());
//手动遍历该集合
notul.each(function(){
//alert(this.innerHTML);
//alert($(this).html());
});
//将记录的间隔显示不同颜色
//:odd(单数) even(双数)
var uls = $("li:even");
//alert(uls.length); //5
/*	uls.each(function(){
this.className="highlight"; //添加class属性值
});
*/
//使用隐式递归
//uls.addClass("highlight");	//为每个元素添加class属性值 
//alert($("span").html());
//$("span").text("<font color='red'>haha</a>");
//$("span").html("<font color='red'>haha</a>");
//$("li:first").addClass("highlight");
//$($("li").get(2)).addClass("highlight");
//$("li:eq(2)").addClass("highlight");
//$("li:gt(2)").addClass("highlight");
//$("li:lt(2)").addClass("highlight");
//获取所有的h标签
//var hs = $("h1,h2,h3,h4,h5,h6");
//hs.addClass("head");
//$(":header").addClass("head");
//内容
//contains
//var nodes = $("li:contains(4)");
//nodes.addClass("highlight");
//var ele = $(":hidden");
//var ele = $(":visible");
//表单
//var ele = $(":text");
//var ele = $(":input");
//表单对象属性
//var fms = $("form").get(0);
//alert(fms.elements.length);
//alert($("input:checked").length);
//alert($("form :checked").length);
//var eles = $("li:contains(4)");
//eles.css("color","red");
----------------
//链式调用源码分析
function Demo()
{
}
Demo.prototype={
setName:function(name)
{
this.name = name;
//返回对象本身
return this;
}
,
getName:function()
{
return this.name;
}
,
setAge:function(age)
{
this.age = age;
return this;
}
,
getAge:function()
{
return this.age;
}
}
//工厂函数
function D()
{
return new Demo();
}
var o = D().setName("xwq").setAge("14");
alert(o.getName()+" "+o.getAge());
});
-------------
1:应用案例1:弹出窗口
A:编写页面:jqueryWin.html
B:编写css:win.css
C:编写js:jqueryWin.js
function showWin()
{
var winNode = $("#win");
//方法一 修改css
//winNode.css("display","block");
//方法二 show()
//winNode.show("slow");  //slow normal fast 可选
//方法三:fadeIn();
//winNode.fadeIn("slow");
//方法四 slideDown
winNode.slideDown(3000);
}
function hide()
{
var winNode = $("#win");
//方法一 修改css
//winNode.css("display","none");
//方法二
//winNode.hide();
//方法三:fadeOut();
//winNode.fadeOut();
winNode.slideUp();
} 
7.12
------
2、应用案例2 弹出菜单
A:编写页面:jqueryMenu.html
B:编写css:menu.css
C:编写js:menu.js
完善点1:单击ul节点任何位置都会触发click事件
完善点2:为二级菜单添加连接,单击后将相关页面在类似与iframe中显示
jQuery(function()
//$(document).ready(function()
{
//var uls = $("ul");
var as = $("ul>a");
as.click(function()
{
//取得当前的点击的ul
var ulNode = $(this);
//找到当前ul下所有li子元素集合 toggle() 切换的显示和隐藏
//ulNode.children("li").toggle("slow");
//完善点一 方法一、nextAll() prevAll()所有li兄弟元素
ulNode.nextAll("li").toggle("slow");
//方法二、parent() 父元素
//ulNode.parent().children("li").toggle("slow");
});
//完善点二
//给子菜单绑定click事件
$("li>a").click(function()
{
//load事件不能用于 $(document).ready
//$("#content").load(this.id);
$("#content").load($(this).attr("id"));
});
});
3、应用案例3:编辑文本框
A:编写html页面-jqueryEdit.html
B:编写css:edit.css
逻辑:
1、让这两个td绑定一个click事件
2、获取当前点击的td对象
3、取出当前td的值,存入临时变量
4、清空td的内容
5、创建一个input输入域
6、将临时变量的值赋给input输入域的value值
7、将该input元素插入到当前td中
8、取消绑定到该td上的click事件
完善点1:修改后单击回车键,修改过的值写入td,input消失,
重新单击时,又可以进入编辑状态
完善点2:文本框内容高亮显示
jQuery(function()
{ 
//绑定事件方法
//$("td").click(tdclick);
//可以绑定多个
$("td").bind(
{
click:tdclick
});
//
});
function tdclick()
{
//获取当前对象中的值
var td = $(this);
var text = td.text();
//var len = text.length;
//清空当前对象中的内容
td.empty();
//创建一个input输入域
var input = $("<input>");
//设置
input.attr("value",text);
//给input绑定keyup事件
input.keyup(function(event)
{
//解决多浏览器获取事件的差异
var myEvent = event||window.event;
//判断是否按下回车键
if(myEvent.keyCode == 13)
{
//保存input元素的内容
var value = input.val();
td.html(value);
//重新获取click事件
td.click(tdclick);
}
});
//将input插入到当前td中
input.appendTo(td);
//td.append(input);
//文本框内容高亮显示
input.get(0).select();
//取消绑定的事件
td.unbind("click");
//另一种方法
//td.html("<input value='"+text+"' size='"+len+"' />");
}
---------------
jQuery(function()
{
$("td").click(tdclick);
});
function tdclick()
{
var td = $(this);
var text = td.text();
td.html("<input value='"+text+"'/>");
var input = td.children();
input.keyup(function(event)
{
var e = event||window.event;
if(e.keyCode == 13)
{
var value = input.val();
td.html(value);
td.click(tdclick);
}
});
td.unbind("click");
}
4:jquery综合案例1:模拟股票涨跌功能
A:建立一个封装股票信息对象:Stock.java
B: 编写服务端的servlet:用于返回实时更新的股票信息 GetStockInfo.java
C:配置web.xml
D:编写页面:jqueryStock.html
完善点1:每隔一秒自动刷新指数
完善点2:当前价格低于昨天收盘价,显示绿盘,否则显示红盘
第二部分:
实现当鼠标移到某个链接后,填出窗口,显示该股票的具体信息
A:修改jqueryStock.html,加入弹出窗口div
B:jqueryStock.js----》jqueryStock1.js
C:编写css,修饰该弹出框:stock.css
D:通过js可控制弹出框的位置
E:返回的JSON格式的值是数组或对象的不同处理方式
var obj;
var sid;
jQuery(function(){
//alert(1);
var stockNode=$("#stock");
//隐藏该弹出框
stockNode.hide();
var as=$("a");
as.mouseover(function(event){		
var aNode=$(this);		
//alert(aNode);
var divNode=aNode.parent();
//对象格式
//sid=divNode.attr("id");
//数组格式
sid=divNode.attr("name");
//更新弹出框
updateDIV();
//通过js可控制弹出框的位置
//A:直线移动
//创建该链接的偏移量
//var offset=aNode.offset();
//设置弹出框的left,top
//stockNode.css("left",offset.left+"px")
//.css("top",offset.top+aNode.height()+"px");
//B:平面移动
//FF/IE兼容
var myEvent = event||window.event;
//alert("x:"+myEvent.clientX+"y:"+myEvent.clientY);
stockNode.css("left",myEvent.clientX+5+"px")
.css("top",myEvent.clientY+5+"px");
//显示该弹出框
stockNode.show();
});
as.mouseout(function(){
//隐藏该弹出框
stockNode.hide();		
});
getInfo();
setInterval(getInfo,1000);
});
function getInfo()
{
$.get("getStockInfo",null,function(data)
{
//data=[{name:"上证指数",yes:2067.2,tod:2056.3,now:2046.71},
// {name:"美利纸业",yes:5.12,tod:5.23,now:5.44}]
//将返回的字符串解析成js对象
var obj = eval(data);
//获取该集合中的具体的股票对象(数组格式)
var szzs = obj[0];
var mlzy = obj[1];
//对象格式
//data=
//{
//       "000001":{name:"上证指数",yes:2067.2,tod:2056.3,now:2051.3},
//	 "000815":{name:"美利纸业",yes:5.12,tod:5.32,now:5.34}
}
//var szzs = obj["000001"];
//var mlzy = obj["000815"];
var span1 = $("#000001").children("span");
span1.html(szzs.now);
var span2 = $("#000815").children("span");
span2.html(mlzy.now);
//当前价格低于昨天收盘价,显示绿盘,否则显示红盘
if(szzs.now > szzs.yes)
{
span1.css("color","red");
}
else
{
span1.css("color","green");
}
if(mlzy.now > mlzy.yes)
{
span2.css("color","red");
}
else
{
span2.css("color","green");
}
//更新弹出框
updateDIV();
});
}
//更新弹出框
function updateDIV(){
var stockObj = obj[sid];
//alert(stockObj.name);
for(var proname in stockObj){
//alert(proname);
if(proname !="name"){
//找到div节点
var spanDiv=$("#"+proname).children("span");
spanDiv.html(stockObj[proname]);
//重新设置红绿盘
if(stockObj.now > stockObj.yes){
$("#now").children("span").css("color","red");				
}
else{
$("#now").children("span").css("color","green");
}
}
}
}
5、jquery综合案例2:模拟下拉框自动补全功能
A:编写服务端代码:AutoComplete.java
B:配置web.xml
C:配写数据文件:word.xml
D:编写页面:jqueryAutoComplete.html
E:编写js:jqueryAuto.js
F:编写补全框的样式:使用js的css方法
G:增加键盘事件:jqueryAuto.js---》jqueryAuto1.js
//定义一个当前高亮显示的节点的索引号
var highlightindex = -1;
jQuery(function()
{
var timeout; //定时器
var wordInput = $("#word");
//获取该输入框的偏移量
var wordInputOffset = wordInput.offset();
//获取autodiv节点对象
var autoNode = $("#auto");
//将自动提示框先隐藏
autoNode.hide().css("border","1px black solid")
.css("backgroundColor","gray")
.css("position","absolute")
.css("left",wordInputOffset.left+"px")
.css("top",wordInputOffset.top+wordInput.height()+7+"px")
.css("width",wordInput.width()+2+"px");
//.width(wordInput.width()+"px");
wordInput.keyup(function(event)
{
var myEvent = event||window.event;
var code = myEvent.keyCode;
//判断是否是a-z,退格键,delete键
if(code >=65 && code<=90 || code==8 || code ==46)
{
var word = wordInput.val();
//将该值交给ajax引擎请求后台服务器
if(word != "")
{
clearTimeout(timeout);
//服务器请求加上延时,最后一个keyup再发送请求
timeout = setTimeout(function()
{
$.post("autoComplete",null,function(data)
{
var jqueryObj = $(data);
//找到所有的word节点
var wordNodes = jqueryObj.find("word");
//清空该提示框
autoNode.empty();
wordNodes.each(function()
{
var text = $(this).text();
if(text.indexOf(word) == 0)
{
//$("<div>").html(text).appendTo(autoNode);
$("<div>").text(text).appendTo(autoNode);
}
});
autoNode.show();
});
},500);
}
else
{
autoNode.hide();
}
}
//单独处理向上和向下键
//向上键
else if(code == 38)
{
var autoNodes = autoNode.children("div");
if(highlightindex == -1)
{
//将索引值置为长度-1
highlightindex = autoNodes.length -1;
}
else
{
//将原来的记录背景还原为白色
autoNodes.eq(highlightindex).css("background-color","white");
highlightindex--;
autoNodes.eq(highlightindex).css("background-color","blue");
}
}
else if(code == 40)
{
var autoNodes = autoNode.children("div");
autoNodes.eq(highlightindex).css("background-color","white");
if(highlightindex == autoNodes.length-1)
{
highlightindex = -1;
}
highlightindex++;
autoNodes.eq(highlightindex).css("background-color","blue");
}
else if(code == 13)
{
if(highlightindex >=0 )
{
var autoNodes = autoNode.children("div");
var wordText = autoNodes.eq(highlightindex).text();
wordInput.val(wordText);
autoNode.hide();
highlightindex = -1;
}
else
{
alert(wordInput.val());
wordInput.blur();
}
}
});
//给按钮绑定click事件
$("input[type='button']").click(function()
{
alert(wordInput.val());
});
});
补充
---------
//js中定义一个对象的方法
var obj={name:"mike",age:12};
jquery中的两大特性:链式调用和隐式递归
html() html(val) //匹配第一个元素
text() text(val) //匹配所有的元素
val() val(val)  //匹配第一个元素
jquery中的相当于js中的onload方法
//jQuery(function()
$(document).ready(function()
/*让相邻框合并*/
border-collapse: collapse;
$():返回一个空的jQuery对象。
$(html):根据提供的HTML字符串,创建DOM 元素,如:$(“<h1>Hello</h1>")
$(elements):将一个或多个DOM元素转化为jQuery对象,如:$(document.body)
//web.xml中的启动时就加载 1是优先级
<servlet>
<servlet-name>getStockInfo</servlet-name>
<servlet-class>com.itany.servlet.GetStockInfo</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
---------
1、使用第三方jar包提供的方法实现将java对象转成JSON格式字符串
A:test.jsp
B:test.js
C:javabean:Person.java,Address.java
D:编写servlet:DemoServlet.java
E:web.xml
servlet
------
resp.setContentType("text/html;charset=utf-8");
//设置该页面无缓存
resp.setHeader("cache-control", "no-cache");
//初始化Person对象
Person p = new Person("xwq","男",24,new Address("江苏省","南京市","浦口区"));
Person p1 = new Person("sj","女",22,new Address("江苏省","南京市","浦口区"));
//将该值存入list集合
List<Person> ps = new ArrayList<Person>();
ps.add(p);
ps.add(p1);
//将该集合转成json数组对象
JSONArray jsonArray = JSONArray.fromObject(ps);
//将sjon数据传给客户端
JSONObject jsonObject = new JSONObject();
jsonObject.put("person", jsonArray);
resp.getWriter().print(jsonObject.toString());
//resp.getWriter().print(JsonUtil.list2json(ps));
js
----
function addPerson()
{
$.ajax(
{
type:"post",
url:"demoServlet",
dataType:"json",
success:function(data)
{
//获取person对象集合
var ps = data.person;
$("#planTable").empty();
$.each(ps,function(i,p)
{
//拷贝行
var row = $("#tr").clone();
//对该行的每个子元素设置
row.find("#name").text(p.name);
row.find("#age").text(p.age);
row.find("#gendar").text(p.gendar);
row.find("#address").text(p.address.province
+p.address.city+p.address.country);
//将该tr追加到table
row.appendTo("#planTable");
});
}
});
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194880.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • AnalyticDB实现和特点浅析「建议收藏」

    AnalyticDB实现和特点浅析「建议收藏」本篇主要是根据AnalyticDB的论文,来讨论AnalyticDB出现的背景,各个模块的设计,一些特性的解析。可能还会在一些点上还会穿插一些与当前业界开源实现的比对,希望能够有一个更加深入的探讨。O

  • Endnote 参考文献格式设置:字体 字号 行距 悬挂缩进

    我们写论文时,通常使用Endnote管理和插入参考文献时常,Endnote在Word中生成的参考文献列表如下,字体、字号、行距、悬挂缩进的设置都未令人满意。下面介绍设置字体、字号、行距、悬挂缩进的方法。首先,打开Endnote软件,选择【Edit】|【Outpu

  • 微型计算机原理与接口技术网课_微型计算机原理与接口技术周荷琴

    微型计算机原理与接口技术网课_微型计算机原理与接口技术周荷琴微型计算机组成原理课程内容介绍第一章微型计算机基础第二章80X80微型处理器第三章汇编语言指令集第四章汇编语言程序设计第五章输入/输出系统第六章中断系统第七章微型计算机系统串行通讯第八章并行I/O接口第九章可编程定时/计数器课程意义汇编语言接口技术学习目标本笔记的视频,源自中国大学MOOC,南京邮电大学的微型计算机原理与接口技术。课程内容介绍第一章微型计算机基础这一章将…

  • 关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码

    关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码一、背景分析目前大数据的分析对一款成熟的APP来说至关重要,特别是商业性的APP和金融类的APP都会对用户的行为进行分析,所以在APP中集成大数据的收集就显得很重要。目前来说,第三方的数据收集也挺多的,像是友盟,AOP切面收集等等,但是他们就是简单的集成,如果说在某些极端的情况下,项目中禁止添加额外的辅助,例

  • C语言排序(冒泡排序、选择排序、插入排序和快速排序)

    C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序(冒泡排序、选择排序、插入排序和快速排序)C语言排序什么是排序?1.冒泡排序基本思想主要思路:动态示例demo2.选择排序基本思想主要思路动态示例demo3.插入排序基本思想主要思路动态示例demo4.快速排序基本思想主要思路动态示例demoC语言排序什么是排序?就是将无序的变成有序的1.冒泡排序基本思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,

  • 什么是句柄

    什么是句柄一、百度百科解释:在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(filehandle),该

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号