$.ajax()总结 喜欢ヅ旅行 2022-05-18 09:42 171阅读 0赞 # **Ajax参数解析和场景应用** # ## **一、定义和用法** ## AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。 ajax请求的常用的5个步骤如下:1.创建 XMLHTTPRequest对象;2.注册回调函数;3.设置和服务器端的连接信息;4.发送数据;5.接受响应数据。 ## **二、写法示例** ## 该参数规定 AJAX 请求的一个或多个名称/值对。 $.ajax(\{\})的第一种写法,success,error $.ajax({ type: "post", //【以POST或GET的方式请求。默认GET。PUT和DELETE也可以用,有的浏览器不支持】 url: url, //【请求的目的地址,须是一个字符串。】 contentType: "application/json", //【以哪种数据类型发送请求】 data: data, //【请求的数据】 dataType: "json", //【想从服务器得到的数据类型。html,json,jsonp,text】 async:false,//【默认为true异步请求,设置为false时为同步请求】 beforeSend:function{......}, //【传递异步请求之前的事件】 success:function{......}, //【请求成功之后的回调】 error:function{......}, //【请求失败之后的回调】 complete(function{......}, //【不管请求成功还是错误,只要请求完成,可以执行的事件。】 }); $.ajax(\{\})的第二种写法,总结为回调写法.done,.fail $.ajax({ type: "post", url: url, contentType: "application/json", data: '{ "requestData": { "SysId": 1, "SysType": "rzrq"}}', dataType: "json", }).done(function (data) { console.log(JSON.parse(data)); eventManger.trigger("showMergeLiCategorySuccess", data); }).fail(function (msg) { console.log(JSON.parse(msg)); eventManger.trigger("requestFailure", msg); }); ## **三、举例说明** ## 这里只举例说明第一种写法 var ajaxRequest=$.ajax({ url: '${pageContext.request.contextPath}/sysback/productbabyset/saveBabyRelate',//提交的URL type: "POST", timeout:1000, async: false, cache: true, // data: $('#mainForm').serialize(), // 要提交的表单,必须使用name属性 data : {data:data}, dataType: "json", beforeSend : function(XMLHttpRequest, textStatus){ //参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 }, success: function (data, textStatus) { //data:由服务器返回,并根据dataType参数进行处理后的数据 //textStatus:描述状态的字符串。 doing something... }, error: function(XMLHttpRequest, textStatus, errorThrown){ //XMLHttpRequest对象 //textStatus的值:null, timeout, error, abort, parsererror //errorThrown的值:收到http出错文本,如 Not Found 或 Internal Server Error alert(XMLHttpRequest.readyState + XMLHttpRequest.status + XMLHttpRequest.responseText); //详见参考文章$.ajax的error,complete,success方法 } complete: function(XMLHttpRequest, textStatus){ //XMLHttpRequest对象 //textStatus的值:success,notmodified,nocontent,error,timeout,abort,parsererror doing something... //For Example : request timeout if(status=='timeout'){ ajaxRequest.abort(); // Do not send ajax request } } }); ## **四、参数说明** ## **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:返回纯文本字符串。 **8.beforeSend**: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest)\{ this; //调用本次ajax请求时传递的options参数 \} **9.complete**: 要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus)\{ this; //调用本次ajax请求时传递的options参数 \} **10.success**: 要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus)\{ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 \} **11.error**: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown)\{ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 \} **12.contentType**: 要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。 **13.dataFilter**: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type)\{ //返回处理后的数据 return data; \} **14.dataFilter**: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type)\{ //返回处理后的数据 return data; \} **15.global**: 要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。 **16.ifModified**: 要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。 **17.jsonp**: 要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如\{jsonp:'onJsonPLoad'\}会导致将"onJsonPLoad=?"传给服务器。 **18.username**: 要求为String类型的参数,用于响应HTTP访问认证请求的用户名。 **19.password**: 要求为String类型的参数,用于响应HTTP访问认证请求的密码。 **20.processData**: 要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。 **21.scriptCharset**: 要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用。 ## **五、实践出真知** ## 用ajax实现表单提交 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form id="formTest"> <select name="single"> <option>Single</option> <option>Single2</option> </select> <select name="multiple" multiple="multiple"> <option selected="selected">Multiple</option> <option>Multiple2</option> <option selected="selected">Multiple3</option> </select> <input type="checkbox" name="check" value="check1" /> check1 <input type="checkbox" name="check" value="check2" checked="checked" /> check2 <input type="radio" name="radio" value="radio1" checked="checked" /> radio1 <input type="radio" name="radio" value="radio2" /> radio2 <input type="submit" id="submit" value="提交"> </form> </body> </html> 那么用jQuery来做Ajax提交就这样 $(function { $('#submit').click(function { $.ajax({ url: '你的提交url地址', type: 'post', dataType:'json' data: $("#formTest").serializeArray,//serializeArray方法会自动将表单转换为json对象 success: function(msg) { } }); }); }); ## **最后总结一下ajax的优缺点** ## **优点:** 1.无刷新更新数据 Ajax最大的优点就是能在不刷新整个页面的情况下维持与服务器通信 2.异步与服务器通信 使用异步的方式与服务器通信,不打断用户的操作 3.前端与后端负载均衡 将一些后端的工作移到前端,减少服务器与带宽的负担 4.基于规范被广泛支持 不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。 5.界面与应用分离 Ajax使得界面与应用分离,也就是数据与呈现分离 **缺点:** 1.Ajax干掉了Back与History功能,即对浏览器机制的破坏 在动态更新页面的情况下,用户无法回到前一页的页面状态,因为浏览器仅能记忆历史纪录中的静态页面 2.安全问题 AJAX技术给用户带来很好的用户体验的同时也对IT企业带来了新的安全威胁,Ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。 3.对搜索引擎支持较弱 4.破坏程序的异常处理机制 5.违背URL与资源定位的初衷 6.不能很好地支持移动设备 7.客户端肥大,太多客户段代码造成开发上的成本 **参考文章** : 1、[$.ajax()方法详解][.ajax] 2、[Ajax最详细的参数解析和场景应用][Ajax] 如有侵权,请联系作者删除。 [.ajax]: https://www.cnblogs.com/tylerdonet/p/3520862.html [Ajax]: https://blog.csdn.net/u011277123/article/details/53500913
还没有评论,来说两句吧...