ajax至今出来大概已经有十年左右的时间了。
ajax与服务器语言无关,不刷新页面与后台进行交互。但是这样会导致后退功能不好用,同时对于浏览器兼容性,以及对流媒体、手机的支持性比较差。
常见的ajax用法就是教验用户名是否重复、级联动等。
ajax传输数据有3种方式:xml,html,json。
xml相对来说比较笨重,解析也困难,但是xml是通用的数据交换格式
html,不需要解析可以直接放到文档中,若仅更新一部分区域,但传输的数据不是很方便,且html代码需要拼
json:小巧,有面向对象的特征,而且很多第三方的jar包可以把java对象或集合转为json字符串。
实现ajax可以使用XMLHttpRequest,也可以使用jQuery。下面是XMLHttpRequest的一个示例:
window.οnlοad=function(){ //获取a节点,并为其添加onclick响应函数 document.getElementsByTagName("a")[0].onclick = function(){ 创建一个对象 var request = new XMLHTTPRequest(); 准备发送请求的数据:url var url =“” var method ="GET"; 调用对象的open方法 request.open(method,url); request.send(null); 添加响应函数 request.onreadystatechange = function(){ 对象readyState属性值为4的时候 if(request.readyState == 4){ 再判断响应是否可用, if(request.status == 200 || request.status == 304){ alert(request.responseText); document.getElementById("").innerHTML = request.responseText; } } } } }abort()停止当前请求 getAllResponseHeader()把http请求的所有响应首部作为键值对返回 open("method","url")建立对服务器的调用,method方法类型,像get post等 send向服务器发请求 status状态码 setRequestHeader("header""value")把指定首部设置为所提供的值,在设置任何首部之前必须先调用open return false可以取消节点的默认行为onreadystatechange是由服务器触发,在ajax执行过程中,服务器会通知客户端当前的通信状态。这依靠更新XMLHttpRequest对象的readyState来实现。改变readyState属性是服务器对客户端连接操作的一种方式。每次readyState属性的改变都会触发readystatrchange事件
jQuery的load方法:可以用于HTML文档的元素节点,把结果直接加为对应节点的子元素,通常而言,load方法加载后的数据是一个HTML片段 var $obj = var url = var args = {key:value,} $obj.load(url,args) 除去使用load方法的情况,大部分时候都使用$.get,$.post,$.getJSON $.get(url,args,function(data){ //data:ajax响应成功后的数据,可能是xml,html,json }) 请求json数据 $.get(url,args,function(data){ //data:ajax响应成功后的数据,是json },“JSON”)
解析xml: 1,创建对应的节点 2,再把节点加入到对应的html中 xml对象,使用getElementsByTagName("标签名称")[0].firstChild.nodeValue;可以获取到标签内容 xml就是为传输数据而生的 json是javaScript原生格式,比xml更轻巧,js处理json不需要任何特殊的api或工具 json也可以是一个方法 var jsonObject ={"heihei":function(){ alert("heihei方法")}; 调用的时候jsonObject.heihei(); 解析json json只是一个text文本串,将json转换为json对象 需要使用一个方法eval();会将一个字符串转为本地的js代码来执行; var jsonText =“{'name':'haha'}” eval(“(”+jsonText+")");即可; var a = “alert('hello eval')”; eval(a);会执行alert()方法; eval()函数存在风险 使用jQuery写ajax方法 load()方法是jQuery中最为简单和常用的Ajax方法,能载入远程的HTML代码并插入到DOM中,它的结构是:load(url,【data】,【callback】);除了url其余两项是可选项; 选择器.load(url);任何一个html节点都可以使用load方法来加载ajax,结果将直接插入html节点中 this.href+" h2 a"; $("a")表示获取所有的a节点 $.get(url,args,function(data){$(data).find(name).text()})其中data为dom对象,args为json格式 将$.getJSON,则data直接为json格式。 或者$.get(url,args,function(data){$(data).find(name).text()},“JSON”) 传参 time newDate()可以减小缓存影响 如果从服务器返回json字符串,则属性名必须使用双引号。 jackson转字符串 1,导入相关jar包(jackson-annotations-banben.jar,jackson-core-banben.jar,jackson-databind-banben.jar) 2,创建ObjectMapper对象 3,调用ObjectMapper对象的writeValueAsString()方法把一个对象或者集合转为一个JSON字符串 4,注意:JackSon使用getter方法来定位JSON对象的属性,而不是字段 5,可以通过在类的getter方法上添加注解JsonIgnore(org。codehaus.jackson.annotate.JsonIgnore)忽略某一个getter定义的属性 ajax典型案例:三级联动 使用blockUI:ajax开始的时候工作(执行$.blockUI),结束的时候停止(执行$.unblockUI)。$.blockUI需要包含在function中。
2016年8月14日
使用jQuery元素选取的对象是一个DOM数组,jQuery和DOM对象不共用属性和方法。
可以互转:Dom转jQuery var $a= $(dom对象),jQuery转DOM通过两种方式var a = $a[0]或者$a.get(0);因为jQuery对象是一个数组,有length属性。val()可以获取表单元素的value属性值
jQuery属性选择器【name】,指的是包含name属性的元素,
【name=value】指的是name属性值为value的元素
如果有多个属性选择,那么则【】【】。。。并列就行。
选取子元素:
$(“div.one”)选取类为one的div
$(“.one”)选取类为one的元素
$(“.one :nth-child(2)”)选取类为one的第二个子元素,子元素过滤器前面要加空格
如果是checkbox,要选取的话
var a = $(“:checkbox[name=’hi’]:checked”)
如果是select,要选取的话
Var a = $(“select :selected”),冒号之前有个空格。
a.val()只能获取到第一个选中元素的值,jQuery中遍历要用each,
在each内部的this是一个DOM对象,而不是一个jQuery对象。
使用this.value或者$(this).val(),前者为dom,后者为jQuery对象,因为jQuery对象是使用$()包装DOM对象后的对象。
使用this.nodeName可以获取到标签名字。
过滤选择器一般都是在选择器后面追加使用
使用jQuery插入节点,格式为:$(“<li id=’’ >北京</li>”)。