最底层最全面的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的作业。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: