
| jQuery 中文文档 |
| 孙本强 |
| 2010-11-10 |
目 录
部分常用方法速查 2
选择器 2
表单选择器 4
属性 5
节点匹配 6
文本处理 12
Css 13
事件 15
动画效果 18
Ajax 20
其他 24
Ajax 24
1. load( url, [data], [callback] ) 24
2. jQuery.get( url, [data], [callback] ) 25
3. jQuery.post( url, [data], [callback], [type] ) 26
4. jQuery.getScript( url, [callback] ) 27
5. jQuery Ajax 事件 27
6. jQuery.ajax( options ) 29
7. jQuery.ajaxSetup( options ) 31
8. serialize() 与 serializeArray() 31
部分常用方法速查
$()
如果()内是
css选择器:找到相应的节点包装成JQuery对象
DOM对象:直接包装成JQuery对象
一段HTML代码:先创建DOM对象,再包装成JQuery对象
$("").appendTo($(obj))
返回 jQuery
$(#id)
根据给定的ID匹配一个元素。
返回 jQuery
$(element)
根据给定的元素名匹配所有元素
返回 Array $(.class) 根据给定的类匹配元素。 返回 Array $(*) 匹配所有元素 返回 Array $(selector1,selector2,selectorN) 将每一个选择器匹配到的元素合并后一起返回。 返回 Array 选择器 parent > child 取得下的所有子节点 $("div > span") 返回Array :first 选取所有元素中第一个元素 $("div:first") 返回jQuery :last 选取所有元素中最后一个元素 $("div:last") 返回jQuery :not(Selector) 选取所有class不是mytest的元素 $("div:not(.mytest)") 返回Array :even 查找表格的偶数行,从0开始计数 $("tr:even") 返回Array :odd 查找表格的奇数行,从0开始计数 $("tr:odd") 返回Array :eq(index) 匹配一个给定索引值的元素,从0开始计数 $("tr:eq(1)") 返回Array :gt(index) 匹配所有大于给定索引值的元素,从0开始计数 $("tr:gt(0)") 返回Array :lt(index) 匹配所有小于给定索引值的元素,从0开始计数 $("tr:lt(2)") 返回Array :animated 选取当前正在执行动画的所有元素 $(":animated") 返回Array :contains(string) 选取所有文本内容包含“关键词”的元素 $("div:contains('关键词')") 返回Array :has 查找所有含有 子元素的父元素 $("div:has(p)") 返回Array :empty 选取所有空的元素 $("div:empty") 返回Array :visible 查找所有可见元素 $("tr:visible") 返回Array [attribute = value] 选取文本输入框的input元素 $("input[type=text]") 返回Array [attribute != value] 选取所有不是hidden的input元素,注意,没有type属性的input也会被选取 $("input[type!=hidden]") 返回Array [attribute ^= value] 选取开头为mailto:的所有a链接 $("a[href^='mailto']") 返回Array [attribute $= value] 选取所有结尾为的img图片 返回Array 表单选择器 :input 查找所有的input元素(包括input, textarea, select和button) $(":input") 返回Array :password 查找所有密码框 $(":password") 返回Array :text 查找所有单行文本框 $(":text") 返回Array :radio 查找所有单选按钮 $(":radio") 返回Array :checkbox 查找所有复选框 $(":checkbox") 返回Array :checked 查找所有选中的checkbox, radio $("input:checked") 返回Array :selected 查找所有选中的选项元素 $("select:selected") 返回Array 属性 attr(key) attr(key,value)设置一个属性的值 HTML: jQuery: $("img").attr("src"); Result: 返回jQuery removeAttr(key) 删除一个属性 HTML: jQuery: $("img").removeAttr("src"); Result: [ ] 返回jQuery addClass(class) 追加指定的类名 HTML: Hello jQuery: $("p").addClass("selected highlight"); Result: [ Hello 返回jQuery removeClass() 移除样式 Html: 你最喜欢的是? JQuery: $("p").removeClass("red"); Result: 你最喜欢的是? 可以同时移除多个样式: $("p").removeClass("red bold"); 或者全部移除样式: $("p").removeClass(); 返回jQuery toggleClass() 如果节点存在该样式,则移除,不存在,则追加 $("p").toggleClass("blue"); 返回jQuery hasClass(class) 判断节点是否存在该样式,返回布尔值 $("p").hasClass("blue"); 该方法等价于:$("p").is(".blue"); 返回jQuery html() 取得或设置文本内容 类似innerHTML() 仅可用于html文档 返回String/jQuery text() 取得或设置文本内容 类似innerText() 可以用于html和xml文档 返回String/jQuery val() 取得或设置input文本框的值 Html: JQuery: $("searchbox").focus(function(){ if(this.val()=="搜索的内容…"){this.val("")} }); $("searchbox").blur(function(){ if(this.val()==""){this.val(this.defaultValue)} }); this.defaultValue 表示input文本框的默认value 通过val()还能做到将表单多选框,checkbox,radio事先选中: $(":checkbox").val(["check2 $(":radio").val(["radio2"]); 返回String/Array 节点匹配 each(callback) 为每一个匹配的元素执行一个函数 迭代两个图像,并设置它们的 src 属性 注意此处 this 指代的是 DOM 对象而非 jQuery 对象 HTML: jQuery: $("img").each(function(i){ }); Result: [ , ] 返回jQuery size()/length 获取对象中元素的个数 $("img").size(); $("img").length; 返回Number index([subject]) 匹配的元素,并返回相应元素的索引值,从0开始计数 HTML: jQuery: $('li').index($('#bar')); //1 $('li').index($('li:gt(0)')); //1 $('#bar').index('li'); //1 $('#bar').index(); //1 返回Number get()/get(index) get():以数组形式取得所有匹配的节点集合 get(index) :index存在则从中选择某一个DOM节点 HTML: jQuery: $("img").get(0); Reslut: [ ] 返回Array eq(index) 以对象形式获取第index个元素,位置从0算起 获取匹配的第二个元素 HTML: This is just a test. So is this jQuery: $("p").eq(1) Result: [ So is this 补充 .get(index)和.eq(index)的区别 .get(index)返回的是一个html数组 .eq(index)返回的是一个Jquery对象 $("ul li").get(1).css("color", "red"); //这个是错误的 $("ul li").eq(1).css("color", "red"); //这个是正确的 同理将JQuery对象转换为DOM对象可以使用get alert一个非JQuery对象,如: var $cr = $("#cr"); var cr = $cr.get(0); alert(cr.checked); 返回jQuery first() 获取匹配的第一个元素 $('li').first() 等价于 $('li:first') 返回jQuery last() 获取匹配的最后一个元素 $('li').last() 等价于 $('li:last') 返回jQuery filter(fn) 筛选出与指定函数返回值匹配的元素集合 保留子元素中不含有ol的元素。 HTML: How are you? jQuery: $("p").filter(function(index) { return $("ol", this).length == 0; }); Result: [ How are you? 返回jQuery has(expr) 保留包含特定后代的元素,去掉那些不含有指定后代的元素 HTML: jQuery: $('li').has('ul').css('background-color', 'red'); 返回jQuery not(expr) 删除与指定表达式匹配的元素 从p元素中删除带有 select 的ID的元素 HTML: Hello Hello Again jQuery: $("p").not( $("#selected")[0] ) Result: [ Hello 返回jQuery find(expr) 搜索所有与指定表达式匹配的元素 从所有的段落开始,进一步搜索下面的span元素。与$("p span")相同。 HTML: Hello, how are you? jQuery: $("p").find("span") Result: [Hello ] 返回jQuery next([expr]) 取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合 找到每个段落的后面紧邻的同辈元素。 HTML: Hello Hello Again And Again jQuery: $("p").next() Result: [ Hello Again 找到每个段落的后面紧邻的同辈元素中类名为selected的元素。 HTML: Hello Hello Again And Again jQuery: $("p").next(".selected") Result: [ Hello Again 返回jQuery prev([expr]) 前面的同辈元素 同上 返回jQuery children([expr]) 子元素集合 同上 返回jQuery parent([expr]) 父元素集合 同上 返回jQuery siblings([expr]) 符合条件的所有同辈元素的元素集合 找到每个div的所有同辈元素。 HTML: Hello And Again jQuery: $("div").siblings() Result: [ Hello And Again 返回jQuery is(expr) 如果元素集合中有一个元素符合表达式,返回true Html: JQuery: $("input[type='checkbox']").parent().is("form") Result: True 判断元素是否处于动画状态 if(!$(element).is(":animated")){…} 返回Boolean end() 回到最近的一个"破坏性"操作之前。即,将匹配的元素列表变为前一次的状态 所谓的"破坏性"就是指任何改变所匹配的jQuery元素的操作。 如:add, andSelf, children, filter, find, map, next, nextAll, not, parent, parents, prev, prevAll, siblings, slice, clone。 选取所有的p元素,查找并选取span子元素,然后再回过来选取p元素 HTML: Hello,how are you? jQuery: $("p").find("span").end() Result: [ Hello how are you? 返回jQuery 文本处理 append() $(A).append(B) 将B的内容追加到A元素内 Html: 我想说: JQuery: $("p").append("你好"); Result: 我想说:你好 返回jQuery appendTo() $(A).appendTo(B) 将A的内容追加到B元素内 Html: 我想说: JQuery: $("你好").appendTo("p"); Result: 我想说:你好 返回jQuery replaceWith() $(A).replaceWith(B) 将B的内容替换到A节点 Html: 你最喜欢的是? JQuery: $("p").replaceWith("你最不喜欢的是?"); 返回jQuery replaceAll() $(A).replaceAll(B) 将A的内容替换到B节点 Html: 你最喜欢的是? JQuery: $("你最不喜欢的是?").replaceAll("p"); 返回jQuery remove() 移出节点 JQuery: $("ul li:eq(1)").remove(); $("ul li").remove("li[title!=菠萝]"); 返回jQuery empty() 清空节点 JQuery: $("ul li:eq(1)").empty(); 该节点里的文本内容和子节点将全部清空 返回jQuery Css css(name,value) 取得一个元素的css值或设定一个元素的css值 $("p").css("color 和attr方法一样,可以同时赋值多个css属性 $("p").css({"color":"#cc0000 返回jQuery offset() 取得元素在当前窗口中的定位值,返回两个属性left,top var offset = $("p").offset(); var left = offset.left; var top = offset.top; 返回Object{top,left} position() 取得元素相对于最近一个 position为relative 或position为absolute的父节点定位值,返回两个属性left,top var position = $("p").position(); var left = position.left; var top = position.top; 返回Object{top,left} scrollLeft([val]) 获取或设置匹配元素相对滚动条左侧的偏移 取得浏览器滚动条的左边界 $(window).scrollLeft() 获取第一段相对滚动条顶部的偏移 HTML: Hello 2nd Paragraph jQuery: var p = $("p:first"); $("p:last").text("scrollTop:" + p.scrollTop()); Result: Hello scrollTop: 0 返回Number scrollTop([val]) 获取或设置匹配元素相对滚动条顶部的偏移 取得浏览器滚动条的上边界 $(window).scrollTop() 返回Number height([val]) 取得对象的高度,或赋值对象的高度 浏览器可视区域的高 $(window).height(); 返回Number width([val]) 取得对象的宽度,或赋值对象的宽度 $("#gooDiv").width(300); 返回Number innerHeight() obj的自身大小 + padding大小 返回Number innerWidth() 同上 返回Number outerHeight([true]) obj自身大小 + padding大小 + border大小 如果属性true: obj自身大小 + margin大小 + padding大小 + border大小 返回Number outerWidth([true]) 同上 返回Number 事件 bind(type,[data,]fn) 对象事件响应,event可以是JS事件,也可以是JQuery事件 $('#foo').bind('click', function() { alert('User clicked on "foo."'); }); 多个事件捆绑,每个事件类型用空格分隔: $('#foo').bind('mouseenter mouseleave', function() { $(this).toggleClass('entered'); }); 在jQuery 1.4中,可以通过传入一个映射对来一次绑定多个事件处理函数: $('#foo').bind({ click: function() { // do something on click }, mouseenter: function() { // do something on mouseenter } }); 事件处理函数: $('#foo').bind('click', function() { alert($(this).text()); }); 返回jQuery trigger(type[,data]) 让节点主动触发js/jQuery事件 可以触发多个事件,如: $(obj).trigger("focus").trigger("select"); 返回jQuery hover(over,out) 模仿悬停事件的方法 $("td").hover(function(){ $(this).addClass("hover"); }, function(){ $(this).removeClass("hover"); }); 返回jQuery toggle(fn1,fn2[,fn3]) 模拟多次点击情况的方法 另一个作用是切换可视状态 $("td").toggle(function(){ $(this).addClass("selected"); },function(){ $(this).removeClass("selected"); }); 返回jQuery click(fn) 返回jQuery focus(fn) 返回jQuery keyup(fn) 这里的event是JQuery返回的一个事件对象,event有一个which属性,可以获得键盘按键的键值。 inputObj.keyup(function(event){ var keycode = event.which; //处理回车的情况 if(keycode == 13){ var inputtext = $(this).val(); //将td的内容修改成文本框的内容 tdObj.html(inputtext); } //处理esc的情况 if(keycode == 27){ tdObj.html(text); } }); 1 = 鼠标左键,2 = 鼠标中键,3 = 鼠标右键,13 = 回车,16 = shift,17 = ctrl,27 = ESC 另外event.pageX和event.pageY两个属性用于获得鼠标相对于页面的x坐标和y坐标。 $("a").click(function(event)){ alert("current mouse position:"+event.pageX+ return false; } 返回jQuery load(fn) 当对象加载完成时触发, 对应javascript中的onload事件 另一个作用时ajax加载页面 本例中捕捉图片加载完成的事件 //javascript的Image对象可以预装图片 var myImg = new image(); … }); 返回jQuery mousedown(fn) 返回jQuery mousemover(fn) 返回jQuery mouseout(fn) 返回jQuery mouseup(fn) 返回jQuery resize(fn) 当窗口对象的大小发生改变时 $(window).resize(function(){…}); 返回jQuery scroll(fn) 当窗口对象拖动滚动条时 $(window).scroll(function(){…}); 返回jQuery submit(fn) 这里需要一个return false,来阻止默认的提交事件 返回jQuery 动画效果 show(speed,[callback]) 高度宽度透明度一起变化 速度fast,normal,slow要用""括起来,单位毫秒 返回jQuery hide(speed,[callback]) 返回jQuery toggle(speed,[callback]) 返回jQuery slideDown(speed,[callback]) 高度变化 返回jQuery slideUp(speed,[callback]) 返回jQuery slideToggle(speed,[callback]) 返回jQuery fadeIn(speed,[callback]) 透明度变化 返回jQuery fadeOut(speed,[callback]) 补充一个类似fadeToggle效果的小插件 jQuery.fn.fadeToggle = function( speed, easing, callback) { return this.animate({opacity: 'toggle'}, speed, easing, callback); }; 返回jQuery fadeTo(speed,[callback]) 返回jQuery $(obj).animate(css,speed,[callback]) 其他动画的底层实现全部基于该方法 使某个节点的某个css属性在设定时间内变化 JQuery: $("myphoto").animate({opacity:0},300); $("myphoto").animate({left:"400px"},300); 累加动画: $(this).animate({left:"+=500px"},300); +=累加 -=累减,表示在当前位置累加500像素 多重动画: $(this).animate({left:"500px",height: "200px"},300); 综合动画: $(this).animate({left:"400px",height: "200px",opacity:"1"},3000).fadeOut("slow"); 当animate完成后,再执行fadeOut,这就是链式队列 回调函数callback: 以上列子如果将fadeOut("slow") 改成css("border由于css方法并不是动画效果,并不会在链式队列中等待,而是直接实现了。如果想让它也在animate后执行,必须用callback $(this).animate({left:"400px",height: "200px",opacity:"1"},3000,function(){ $(this).css("border 返回jQuery stop([clearQueue], [gotoEnd]) 停止所有在指定元素上正在运行的动画 clearQueue 表示是否要清空其他未完成的动画队列 gotoEnd 表示是否将正在执行的动画跳转到末状态 $("#panel").hover(function(){ $(this).stop().animate({height: "150px", width: "300px"},200); },function(){ $(this).stop().animate({height: "22px", widht: "60px"},300); }); 如果这里不使用stop(),那么鼠标频繁触发事件的话,前面0.2秒还没完成,后面紧跟着的0.3秒效果 出不来,只能排队,越排越长。 stop()在无参数情况下,只能停止正在进行的一个动画,碰到多动画效果需要加上true参数: $("#panel").hover(function(){ $(this).stop(true).animate({height:"150px"},200).animate({width:"300px"},300); },function(){ $(this).stop(true).animate({height:"22px"},300).animate({widht:"60px"},200); }); 第二个参数gotoEnd,一般用法是stop(false,true),效果是不执行动画队列,但直接达到动画结束时的效果,如同直接用了css()设置了参数。 返回jQuery dequeue(name) 让动画马上执行,即让两种或多种效果同时执行,而不用等待前一个动画效果结束(从队列最前端移除一个队列函数,并执行他) $("button").click(function(){ ("div").animate({left:'+=200px'}, 2000); $("div").animate({top:'0px'}, 600); $("div").queue(function () { $(this).toggleClass("red"); $(this).dequeue(); }); $("div").animate({left:'10px', top:'30px'}, 700); }); 返回jQuery Ajax load(url,[data],[callback]) load(url selector) 载入远程 HTML 文件代码并插入至 DOM 中 全部载入,必须是UTF-8编码,否则中文乱码; 只有符合css选择器的部分内容载入; 无论加载是否成功,callback都会触发。 $("#show div").load("test.html"); $("#show div").load("test.html H2"); 返回jQuery $.get(url[,data][,callback][,type]) callback 只有返回状态是success才调用 type 返回内容的格式,包括xml, html, script, json, text 和_default HTML: 已有评论: JQuery: $("#send").click(function(){ $.GET("GET1.PHP",{ username:$("#username").val(), content:$("#conent").val()}, function(data,textStatus){ //data: 返回内容,HTML XML JSON 等 //textStatus: 请求状态4种success, error, notmodified, timeout }); }); $.get("http://127.0.0.1/JQuery/userverify?username="+encodeURI(encodeURI(username)),null,func ion(response){ $("#result").html(response); }); //两次encodeURI转换编码,并在服务器代码中按utf-8方式做一次URLDecode可解决中文乱码问题。 返回XMLHttpRequest $.post(url[,data][,callback][,type]) GET与POST的区别: GET请求会将参数跟着URL后进行传递,POST请求则作为HTTP消失实体内容发送给服务器。 GET方式传送的数据不能大于2KB,POST无 GET方式请求的数据会被浏览器缓存,比如跟在URL后的用户名和密码,有安全隐患,POST不会 $(function(){$("#send").click(function(){ $.post("post.php",{ //由于带参数的load也是用post传递,所以也可以是 //load("post.php",{ username:$("#username").val(), conent:$( "content").val() },function(data){ $("#resText").append(data); }); }); }); 返回XMLHttpRequest $.ajax([options]) jQuery 底层 AJAX 实现 几个常用options: type: GET/POST url: data: dataType: html/xml/script/json/jsonp/text success:function 用$.ajax()实现$.getScript()方法 $(function(){ $("#send").click(function(){ $.ajax({type:"GET", url:"test.js", dataType:"script"}); }); }) 用$.ajax()实现$.getJSON()方法 $(function(){ $("#send").click(function(){ $.ajax({ type:"GET url:"test.json dataType:"json success:function(data){ $("#resText").empty(); var html = ""; $.each(data,function(index,comment){ tml+=" +" "+comment["content"]+" }); $("#resText").html(html);} }); }); }) 保存数据到服务器,成功时显示信息。 jQuery: $.ajax({ type: "POST url: "some.php data: "name=John&location=Boston success: function(msg){ alert( "Data Saved: " + msg ); } }); 返回XMLHttpRequest ajaxComplete(callback) AJAX 请求完成时执行函数 $("#msg").ajaxComplete(function(event,request, settings){ $(this).append(" }); 返回jQuery ajaxSuccess(callback) AJAX 请求成功时执行函数 同上 返回jQuery ajaxStart(callback) AJAX 请求开始时执行函数 可以用bind给对象绑定2个ajax事件: $("#show").bind("ajaxStart",function(){ $(this).slideDown(500); }).bind("ajaxStop",function(){ $(this).slideUp(500); }); 返回jQuery ajaxStop(callback) AJAX 请求结束时执行函数 返回jQuery ajaxError(callback) AJAX 请求发生错误时执行函数 返回jQuery ajaxSend(callback) AJAX 请求发送前执行函数 返回jQuery serialize() 序列表表格内容为字符串 如果表单中的元素非常多,那么使用{key:value}的赋值方法就相当繁琐,所以可以改成: HTML: Results: jQuery: $("input[type=submit]").click(function(){ $.get("get1.php",$("form").serialize(),function(data,textStatus){ $("#results").html(data); }); }) serialize()可以查找form1表单下的所有元素值并转化成字符串 当我们处理中文数据时,需要使用 ncodeURIComponent进行转换,但是如果使用serialize()则会自动进行了编码。 serialize()方法,还可以用来选取元素,如:$(":checkbox, :radio").searialize(); 复选框和单选框选中的值序列化成字符串形式 返回String 其他 data(name,data) 缓存数据data(name) 取值 $(obj).data(name.value); var data = $(obj).data(name); 返回Any $.browser 可以判断浏览器类型$.browser.msie == true $.browser.safari == true $.browser.opera == true $.browser.mozilla == true 返回boolean $.browser.version 判断浏览器的版本 $.browser.version.indexOf("8") 返回String $.trim(str) 去掉字符串起始和结尾的空格 $.trim(" hello, how are you? "); 返回String JQuery载入 $(document).ready(function(){…}); 简写:$(function(){…}); JQuery插件声明 $.fn.pluginName = function(){ this.click(); //方法中的this表示执行这个方法的对象,不用$(this) return this; //保证其他JQuery可以级联操作 } Ajax jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到)。 1. load( url, [data], [callback] ) load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。 参数: ●url (String) : 请求的HTML页的URL地址。 ●data (Map) : (可选参数) 发送至服务器的 key/value 数据。 ●callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。 这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。 这个方法可以很方便的动态加载一些HTML文件,例如表单。 示例代码: $(".ajax.load").load( "http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html .post function (responseText, textStatus, XMLHttpRequest){ this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0] //alert(responseText);//请求返回的内容 //alert(textStatus);//请求状态:success,error //alert(XMLHttpRequest);//XMLHttpRequest对象 }); 注:不知道为什么URL写绝对路径在FF下会出错,知道的麻烦告诉下。下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。还有get()和post()示例都是跨域调用的,发现传上来后没办法获取结果,所以把运行按钮去掉了。 2. jQuery.get( url, [data], [callback] ) jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 参数: ●url (String) : 发送请求的URL地址. ●data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示,会做为QueryString附加到请求URL中。 ●callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。 这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。 示例代码: $.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){ //返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等. this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图 alert(data); //alert(textStatus);//请求状态:success,error等等。 当然这里捕捉不到error,因为error的时候根本不会运行该回调函数 //alert(this); }); jQuery.get()回调函数里面的 this ,指向的是Ajax请求的选项配置信息: 3. jQuery.post( url, [data], [callback], [type] ) jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: ●url (String) : 发送请求的URL地址. ●data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。 ●callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。 ●type (String) : (可选)官方的说明是:Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等) 这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码: Ajax.aspx: Response.ContentType = "application/json"; Response.Write("{result: '" + Request["Name"] + ",你好!(这消息来自服务器)'}"); jQuery 代码: $.post("Ajax.aspx", { Action: "post", Name: "lulu" }, function (data, textStatus){ // data 可以是 xmlDoc, jsonObj, html, text, 等等. //this; // 这个Ajax请求的选项配置信息,参考get()中的this alert(data.result); }, "json"); 这里设置了请求的格式为"json": 如果你设置了请求的格式为"json",此时你没有设置Response回来的ContentType 为:Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据。 注意一下,alert(data.result); 由于设置了Accept报头为“json”,这里返回的data就是一个对象,并不需要用eval()来转换为对象。 4. jQuery.getScript( url, [callback] ) jQuery.getScript( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。 参数 ●url (String) : 待载入 JS 文件地址。 ●callback (Function) : (可选) 成功载入后回调函数。 jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。 这个方法可以用在例如当只有编辑器focus()的时候才去加载编辑器需要的JS文件.下面看一些示例代码: 加载并执行 test.js。 jQuery 代码: $.getScript("test.js"); 加载并执行 AjaxEvent.js ,成功后显示信息。 jQuery 代码: $.getScript("AjaxEvent.js", function(){ alert("AjaxEvent.js 加载完成并执行完成. "+ "你再点击上面的Get或Post按钮看看有什么不同?"); }); 5. jQuery Ajax 事件 Ajax请求会产生若干不同的事件,我们可以订阅这些事件并在其中处理我们的逻辑。在jQuery这里有两种Ajax事件:局部事件 和 全局事件。 局部事件就是在每次的Ajax请求时在方法内定义的,例如: $.ajax({ beforeSend: function(){ // Handle the beforeSend event }, complete: function(){ // Handle the complete event } // ... }); 全局事件是每次的Ajax请求都会触发的,它会向DOM中的所有元素广播,在上面 getScript() 示例中加载的脚本就是全局Ajax事件。全局事件可以如下定义: $("#loading").bind("ajaxSend", function(){ $(this).show(); }).bind("ajaxComplete", function(){ $(this).hide(); }); 或者: $("#loading").ajaxStart(function(){ $(this).show(); }); 我们可以在特定的请求将全局事件禁用,只要设置下 global 选项就可以了: $.ajax({ url: "test.html global: false,// 禁用全局Ajax事件. // ... }); 下面是jQuery官方给出的完整的Ajax事件列表: 1)ajaxStart (Global Event) This event is broadcast if an Ajax request is started and no other Ajax requests are currently running. 2)beforeSend (Local Event) This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.) 3)ajaxSend (Global Event) This global event is also triggered before the request is run. 4)success (Local Event) This event is only called if the request was successful (no errors from the server, no errors with the data). 5)ajaxSuccess (Global Event) This event is also only called if the request was successful. 6)error (Local Event) This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request). 7)ajaxError (Global Event) This global event behaves the same as the local error event. 8)complete (Local Event) This event is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests. 9)ajaxComplete (Global Event) This event behaves the same as the complete event and will be triggered every time an Ajax request finishes. 10)ajaxStop (Global Event) This global event is triggered if there are no more Ajax requests being processed. 6. jQuery.ajax( options ) jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。 $.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。 注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。 当设置 datatype 类型为 'script' 的时候,所有的远程(不在同一个域中)POST请求都回转换为GET方式。 $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。 jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。 参数列表: function (XMLHttpRequest) { this; // the options for this ajax request } function (XMLHttpRequest, textStatus) { this; // the options for this ajax request } String "xml": 返回 XML 文档,可用 jQuery 处理。 "html": 返回纯文本 HTML 信息;包含 script 元素。 "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。 "json": 返回 JSON 数据 。 "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 function (XMLHttpRequest, textStatus, errorThrown) { // 通常情况下textStatus和errorThown只有其中一个有值 this; // the options for this ajax request } function (data, textStatus) { // data could be xmlDoc, jsonObj, html, text, etc... this; // the options for this ajax request } 请认真阅读上面的参数列表,如果你要用jQuery来进行Ajax开发,那么这些参数你都必需熟知的。 示例代码,获取博客园首页的文章题目: $.ajax({ type: "get url: "http://www.cnblogs.com/rss beforeSend: function(XMLHttpRequest){ //ShowLoading(); }, success: function(data, textStatus){ $(".ajax.ajaxResult").html(""); $("item",data).each(function(i, domEle){ $(".ajax.ajaxResult").append(" }); }, complete: function(XMLHttpRequest, textStatus){ //HideLoading(); }, error: function(){ //请求出错处理 } }); 这里将显示首页文章列表。 7. jQuery.ajaxSetup( options ) jQuery.ajaxSetup( options ) : 设置全局 AJAX 默认选项。 设置 AJAX 请求默认地址为 "/xmlhttp/",禁止触发全局 AJAX 事件,用 POST 代替默认 GET 方法。其后的 AJAX 请求不再设置任何选项参数。 jQuery 代码: $.ajaxSetup({ url: "/xmlhttp/ global: false, type: "POST" }); $.ajax({ data: myData }); 8. serialize() 与 serializeArray() serialize() : 序列表表格内容为字符串。 serializeArray() : 序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。 示例: HTML代码: Results: serializeArray() 结果为: 一些资源 一个jQuery的Ajax Form表单插件:http://www.malsup.com/jquery/form/ 一个专门生成Loading图片的站点:http://ajaxload.info/ 大家觉得那些Loading比较炫"+comment["username"]+":
"
这里有几个Ajax事件参数:beforeSend ,success ,complete ,error 。我们可以定义这些事件来很好的处理我们的每一次的Ajax请求。注意一下,这些Ajax事件里面的 this 都是指向Ajax请求的选项信息的(请参考说 get() 方法时的this的图片)。参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 timeout Number 设置请求超时时间(毫秒)。此设置将覆盖全局设置。 async Boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend Function 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。 cache Boolean (默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。 complete Function 请求完成后回调函数 (请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。 contentType String (默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。 data Object, 发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 dataType String 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值: error Function (默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。 global Boolean (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件 ifModified Boolean (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。 processData Boolean (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。 success Function 请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态
