微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用jQuery处理AJAX请求的基础学习教程

$.ajax快捷方法

rush:js;"> $.get(url,[data],[callback],[type]) $.post(url,[type])

两种方法请求方式不同,其他方式相同. 参数:url[请求地址],data[请求的数据内容(obj对象)],callback[回调函数(只能处理请求成功事件)], type[请求返回数据的编码格式(认ContentType指定格式)]

rush:js;"> $.get('/test?x=1'); $.get('/test',{z:2}); $.post('/test',{y:2}); $.get('/user',function(data,callbacktype,jqXHR){ data//返回数据 callbacktype//返回数据的状态信息(字符串) jqXHR//jQuery封装的XHR对象 }); $(selector).load(url,[callback])

页面片段载入到selector的容器里面

rush:js;"> $("#content").load('/user'); $.getJSON(url,[callback])

如果是JSON数据回调会成功,否则失败

rush:js;"> $.getJSON('/test',{type:1},function(){ console.log(argument) }); $.getScript(url,[claaback])

动态加载脚本文件

rush:js;"> $.gerScript('/js/test.js',function(){ alert(test(1,2)); });

$.ajax详细使用方法

rush:js;"> $.ajax(url,[settings]);

$.ajax({
url:'/test',success:function(){
alert('ok');
}
});

处理响应结果的回调函数: success[成功],error[请求失败], statusCode[指明返回的状态码的回调函数], complete[请求返回前的回调函数(处理返回不同状态码的请求)]

rush:js;"> $.ajax('/test',{ success:function(data){ console.log(arguments); },error:function(jqXHR,textStatus,err){ //jqXHR:jQuery增强的XHR //textStatus:请求完成状态 //err:底层通过throw抛出的异常对象,类型与值与错误类型有关 console.log(arguments); },complete:function(jqXHR,textStatus){ //jqXHR:jQuery增强的XHR //textStatus:请求完成状态success | error console.log(arguments); },statusCode:function(){ '403':function(jqXHR,err){ //jqXHR:jQuery增强的XHR //textStatus:请求完成状态 //err:底层通过throw抛出的异常对象,类型与值与错误类型有关 console.log(arguments); console.log(400); },'400':function(){ console.log(400); } } });

请求的数据:data,processData,contentType,Traditional

rush:js;"> $.ajax('/test',{ //请求的数据内容 data:{ a:1,b:2 },//请求的方式 type:'POST',//是否对请求的数据进行转码(用于传输数据为html节点内容) processData:true,//当前的数据是否使用传统方式进行url编码 Traditional:true,//请求数据编码格式 contentType:'application/json' });

响应数据:dataType,dataFilter

rush:js;"> $.ajax('/test',{ success:function(data){ console.log(typeof data) },//定义的返回数据的类型 dataType:'json | html | text | jsonp | script',//返回底层的原始数据进行预处理 dataFilter:function(data,type){ //data:原始数据 //type:指定的数据类型 } });

前置处理:beforeSend

rush:js;"> $.ajax('/test',{ beforeSend:function(jqXHR,settings){ console.log(arguments); jqXHR.setRequestHeader('test','haha'); jqXHR.testData = {a:1,b:2}; },complete:function(jqXHR){ console.log(jqXHR.testData) } });

请求类型:GET(认) | POST | PUT | DELETE 同步异步:async(认true) 是否缓存:cache(认true) 其他参数: 1.global[是否触发全局事件] 2.ifModifed[仅在服务器数据改变时候加载数据] 3.username,password[http需要验证时候] 4.timeout[设置请求超时时间,若请求超时触发error] 5.context[回调中this指向的对象]

其他相关的API

$.ajaxSetup(option)

设置全局认参数

rush:js;"> //认为get请求 $.ajax('/test');

//修改全局请求方式为post
$.ajaxSetup({
type:'post',headers:{
test:new Date().getTime
},cache:false
});

//请求方式改变为post
$.ajax('/test');
$.ajaxPrefilter([dataTypes],handler(option,originalOptions,jqXHR))

请求发起前的预处理,提供了一种AOP(面向切面)编程模式,常见用途: 1.根据option设定执行特定处理逻辑 2.修改option值改变请求认行为 3.通过return修改认dataType

例:通过return修改认dataType

rush:js;"> $.ajaxPrefilter('text html json',function(options,jqXHR){ //options请求参数,含认值 //originalOptions请求时传入的参数,不含认值 //jqXHR:jQuery增强的XHR console.log(arguments); if(options.url == '/test'){ return 'text'; } });

$.ajax('/test',{
type:'post',dataType:'text',//自定义属性
test:'haha'
});

例:多次请求仅最后一次有效,避免多次请求导致的数据混乱

rush:js;"> var requests = {}; $.ajaxPrefilter(function(options,jqXHR){ if(requests[options.url]){ requests[options.url].abort(); } requests[options.url] = jqXHR; });

$.ajax('/test/');
$.ajax('/test/');

例:统一修改请求路径

rush:js;"> $.ajaxPrefilter(function(options){ if(options.url.substr(0,5) == '/usr'){ options.url = options.url.replace('/usr/','/user/'); options.header = { a:1 } } });

$.ajax('/usr/');

全局事件

jQuery-1.9以后,全局事件必须绑定在document上

> ajaxSend >> ajaxSend >> ajaxSuccess >> ajaxComplete >> ajaxError >> ajaxComplete >> ajaxStop

序列化

1.param[序列化一个 key/value 对象] 2.serialize[通过序列化表单值,创建 URL 编码文本字符串] 3.serializeArray[通过序列化表单值来创建对象数组(名称和值)]

例:param()

rush:js;"> var params = { a:1,b:2 }; var str = $.param(params); console.log(str); //a=1&b=2"

例:serialize()

rush:js;">

ajax链式编程方法

在开发的过程,经常会遇到一些耗时间的操作,比如ajax读取服务器数据(异步操作),遍历一个很大的数组(同步操作)。不管是异步操作,还是同步操作,总之就是不能立即得到结果,JS是单线程语音,不能立即得到结果,便会一直等待(阻塞)。

一般的做法就是用回调函数(callback),即事先定义好一个函数,JS引擎不等待这些耗时的操作,而是继续执行下面的代码,等这些耗时操作结束后,回来执行事先定义好的那个函数。如下面的ajax代码

rush:js;"> $.ajax({ url: "test.html",success: function(){ console.log("success"); },error: function(){ console.log("error"); } });

但这样写不够强大灵活,也很啰嗦。为此,jQuery1.5版本引入Deferred功能,为处理事件回调提供了更加强大而灵活的编程模式。

rush:js;"> $.ajax("test.html") .done( function(){ console.log("success"); } ) .fail( function(){ console.log("error"); } );

不就是链式调用嘛,有何优点?

优点一:可以清晰指定多个回调函数

rush:js;"> function fnA(){...} function fnB(){...} $.ajax("test.html").done(fnA).done(fnB);

试想一下,如果用以前的编程模式,只能这么写:

rush:js;"> function fnA(){...} function fnB(){...} $.ajax({ url: "test.html",success: function(){ fnA(); fnB(); } });

优点二:为多个操作指定回调函数

rush:js;"> $.when($.ajax("test1.html"),$.ajax("test2.html")) .done(function(){console.log("success");}) .fail(function(){console.log("error");});

用传统的编程模式,只能重复写success,error等回调了。

原文地址:https://www.jb51.cc/ajax/48877.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐