jQuery中的AJAX
Ajax用的最多,也就是那几个方法,因为暂时研究的并不深,而且jquery里面又封装的那么好,所以就放在jquery里了。
1、load()
我从没想到这货居然是ajax,一般用于获取静态文件,
<script> $(function () { $("#go").click(function () { $("#res").load("t2.html"); }); }) </script> </head> <body> <input type="button" id="go" value="Ajax" /> <div id="res" style="width:500px; height:500px; background-color:#b6ff00"> </div> </body>
load()方法会把获取到的html去掉html,head,body等与主页面有关的标签,然后将有用的信息插入到主页面的要插入的地方,

load()方法也是有回调函数的,里面有2个参数 responseText代表 返回的内容,textStatus 表示 请求状态 success error timeout motmodified 4种,load()比较奇特,就算你不写回调函数也没有关系,无论ajax有没有成功,只要此次请求完成,这个回调函数会自动执行(这是和$.get()等最大的区别了),如果ajax报错也不会影响主页面,只是没有反应而已,另外回调函数里的参数名可以自定义,它会自己识别的
<script> $(function () { $("#go").click(function () { $("#res").load("t2.html", function (responseText, textStatus) { alert(textStatus+" "+responseText); }); }); }) </script> </head> <body> <input type="button" id="go" value="Ajax" /> <div id="res" style="width:500px; height:500px; background-color:#b6ff00"> </div> </body>
结果是:

另外,load()方法如果有参数的话,那就是post方式(那就不能是请求静态文件了),没有的话就是get方式,如果不想把整个静态文件都加载过来,只需要一部分的话,则可以 在请求的url 后加相应的calss 或者 id等方式
$("#res").load("t2.html .para");
2、$.get(,,,)这个是get请求,他的回调函数是在本次请求成功后才触发,也正因为如此,如果想判断是否执行了回调函数的时候,就可以加入alert(1)来测试了,哈哈,另外最后一个参数是支持返回的类型,别的就不说了,就说说json格式吧
对于这个json的话,ajax就没什么说的了,就是动态页返回的json要说一下,Response.Write(new {name="xiaomign",age=25})我以为这就是json了,其实大错特错,这是在后台,生成了一个匿名对象而已,还需要转换成
对应的json字符串,哈哈
index2.aspx
protected void Page_Load(object sender, EventArgs e) { string na = Request["username"].ToString(); string ag = Request["age"].ToString(); Response.Write(new JavaScriptSerializer().Serialize(new { name = na, age = ag })); }
<script> $(function () { $("#go").click(function () { $.get("/index2.aspx", { username: "你大爷", age: 25 }, function (data, textStatus) { $("#name").text(data.name); $("#age").text(data.age); }, "json"); }); }) </script> </head> <body> <input type="button" id="go" value="Ajax" /> <div id="res" style="width:500px; height:500px; background-color:#b6ff00"> <span id="name"></span> <span id="age"></span> </div>
还有啊,好久没写jquery了,居然text的用法不会了,写成了 $("#name").text=data.name; 哈哈 笑死了
3、$.getJSON(,,)和$.get()type=json的时候基本上是一样的,前者可以跨域,就很厉害了,只有3个参数,也是只有请求成功的时候才执行回调。
4、$.getScript(,)请求的是js文件,另外一个参数自然就是 回调函数了。
5、$.post()用法就不说了。
6、说一说jquery最底层的ajax方法——$.ajax()
1.url:
要求为String类型的参数,(默认为当前页地址)发送请求的地址。
2.type:
要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。
3.timeout:
要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。
4.async:
要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
5.cache:
要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
6.data:
要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
7.dataType:
要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
这只是常用的几个参数而已,其实$.ajax({})只有一个参数,其余的那些都是在里面写的
$(function(){ $('#send').click(function(){ $.ajax({ type: "GET", url: "test.json", data: {username:$("#username").val(), content:$("#content").val()}, dataType: "json", success: function(data){ $('#resText').empty(); //清空resText里面的所有内容 var html = ''; $.each(data, function(commentIndex, comment){ html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para"' + comment['content'] + '</p></div>'; }); $('#resText').html(html); } }); }); });
7、序列化serialize(),我们在get,post的时候传递的参数都是{name;"asdf",age:12}这种格式,但是对于表单对象来说,有时候要提交好多个参数的时候,还一个个枚举出来的话,就太不合适了,因此将表单对象
序列化,就OK了。serialize()只是将参数序列化为字符串格式,最后是一个字符串 单选框和复选框只能是在选中的情况下才可以被序列化 name=asdf&age=12
$.get("/index2.aspx",$("#form1").serialize() , function (data, textStatus) { }, "json");
8、serializeArray()也是序列化,但是它返回的不是字符串而是json对象,这是这2个方法的最大的区别,既然是json,那么就可以用$.each()来遍历一下,看看json。
对所有标签序列化
$("#form1").serializeArray()
/* 以下是序列化后的结果数组formArray的内容: [ { name: "uid", value: "1" }, { name: "username", value: "张三" }, { name: "password", value: "123456" }, { name: "grade", value: "3" }, { name: "sex", value: "1" }, { name: "hobby", value: "1" }, { name: "hobby", value: "2" } ]; */
对部分标签序列化 var result = $(":text, select, :checkbox").serializeArray(); /* 以下是序列化后的结果数组result的内容: [ { name: "username", value: "张三" }, { name: "password", value: "123456" }, { name: "grade", value: "3" }, { name: "hobby", value: "1" }, { name: "hobby", value: "2" } ]; */
注意的是:无论是用serialize()还是serializeArray()都用应是标签有name,有value,切记切记。
平时看见的加载中也是ajax
$("#loading").ajaxStart(function () { $(this).show(); }) $("#loading").ajaxStop(function () { $(this).hide(); })
ajax还有几个全局事件,我就给简称为ajax的生命周期吧,哈哈
![]()
补充一下:form表单里的submit按钮,如果不是aspx页面的话,当点击submit按钮的时候使用ajax要注意
$("#form1").submit(function () { $.post('', {}, function (data) { }); return false; });
为了阻止其真正意义上的提交,只是单纯的进行ajax提交,应该return false;

浙公网安备 33010602011771号