最底层最全面的JQuery实现,传入一个options对象,可包含:
$.ajax({ url: "/Keyword1.html", method: "GET", //或者POST success:function(data){}, })
演示:JQuery为请求自动添加了X-Requested-With: XMLHttpRequest
回调函数中的参数data:
success: function (data) { console.log('name:' + data.name); }
success: function (data) { $('#ajaxContainer').html(data);
有时候我们可能需要在返回的HTML片段上绑定事件等……
可以在success回调函数中(@想一想@:为什么要强调这个?不要将事件绑定写在$.ajax()之外):
success: function (data) { $('#ajaxContainer').html(data).find('span').click(function(){ console.log($(this).text());
<div style="border: 1px dashed; padding: 10px;" id="ajaxContainer"> <span>之前的span</span> </div>这时候只能使用append(),但更关键的是:find('span')会包含“之前的span”,这不是我们所期望的结果。所以这时候的解决方案是:讲data转换成JQuery对象后,对$data进行操作:
success: function (data) { let $data = $(data); $data.siblings('span').click(function(){ console.log($(this).text()); }); //@想一想@:这里能不能连缀? $data.appendTo($('#ajaxContainer')); },
但是,采用上述第2种方法时,如果data的HTML结构:(演示)
$data.find('span').click(function () {
$data.siblings('span').click(function () {
和原生的JavaScript处理Ajax不同,error是当服务器返回错误代码信息时触发(这才正常!),比如:
error的回调函数可以有三个参数:
建议总是将error处理函数附上!尤其是调试时,可以封装一个专门的AjaxError()方法,发布时注释……
success: function (data) { //.... }, error: ajaxError }) }) function ajaxError(jqXHR, textStatus, errorThrown) { console.log(errorThrown); }
这就需要用到:
但是,回调函数中不能直接使用this指代发起Ajax请求的按钮!(演示,具体的原理详见:ES进阶之百变this)
有两种解决方案:
beforeSend: function(){ $(event.target).prop('disabled',true);
$('button').click(function (event) { let $trigger = $(this);供其后使用
complete:function(){ $trigger.prop('disabled',false);
注意:a标签不能disabled的(disabled无效),所以如果确实只能由a标签发起请求的话,可以使用hide()和show()
以GET方式发送Ajax请求,获取响应,自定义callback函数处理
//直接传入url和success之后的回调函数 $.get("/keyword1.html", function (data) {
同get,但使用POST发起请求,通常会要求带data(第二个参数)。可以使用:
$.post("/keyword1.html", { name:'fg', age:18 },
$.post("/keyword1.html", "name=fg&age=18",
如果要获取整个form表单数据,我们可以使用JQuery的:
$.post("/keyword1.html", $('form').serialize(),
以上F12-网络演示,success的回调函数无法被击中
文件内容本身的处理同原生JavaScript的处理。
演示:$.post()报错。
JQuery的Ajax方法,默认会对数据进行处理(process),比如解析原生JavaScript对象,设定HTTP请求头的content-type等。
但文件上传时,恰恰是不需要它自作主张的!
所以我们只能使用$.ajax()方法,在其options参数中设定:
processData: false, contentType: false,
F12演示:文件内容能够上传
将Ajax请求的结果直接填充到selector确定的DOM元素
注意:异步和callback,在请求完成(complete,不是成功success)后调用:
alert('加载开始!'); $('div').load("/WebApi/GetLatestChats", function (data) { alert('加载中……'); }); alert('加载结束!');
由$.引导的“静态”方法:
遍历JQuery对象中所有元素的each()方法:
$('p').each(function(index,element){ console.log(index); console.log(element); //element是原生DOM对象了 })
在完成ES进阶课程后,试着学习阅读源代码……
利用JQuery的$.ajax()及其简写方法,重做之前Ajax的作业。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: