jQuery.ajax()方法笔记

1.快速查询jQuery之ajax方法对象参数的众多属性的作用

2.封装ajax方法的例子

3.与服务端互动   参考 (与ASP.NET MVC互动)

官方API jQuery.ajax()

1 $.ajax({
2   url: "test.html",
3   context: document.body
4 }).done(function() {
5   $( this ).addClass( "done" );
6 });
This object will be the context of all Ajax-related callbacks. 
用context设置的对象将成为ajax相关回调函数的上下文,如上面的例子,document.body这个DOM对象会成为第5行this对象的所指代的对象.

根据ajax 自定义reponse标识,封装回调函数, 如返回  {"success":true} 这样的JSON字符串,执行相应的回调部分

部分一: 定义原始成功回调函数,如下第9行至11行

 1 addTag: function (_data, fnError) {//在这里,调用addTag处,fnError未定义,但不影响addTag被调用
 2     return $.wzAjax({
 3         type: "post",
 4         url: "/api/tag/post",
 5         contentType: "application/json;charset=UTF-8",
 6         data: JSON.stringify(_data),
 7         dataType: "json",
 8         customErrorCb: fnError,//customErrorCb 自定义
 9         success: function (data,textStatus,jqXHR) {
10             console.log("addTag_success");
11         }
12     })
13 },

部分二

 1 $.wzAjax = function (requestParamObj) {
 2     var _fnError = requestParamObj.customErrorCb || function (reponseResult) {//fnError:由参数传入的自定义错误处理函数
 3         console.info(reponseResult);
 4         $.alert(reponseResult)
 5     }
 6     , _iniFnSuccess, _fnSuccess, dfd;  //当传入参数定义success时, _fnSuccess:根据response的结果,封装定义成功处理函数, _iniFnSuccess保留原定义的成功回调函数
 7     return requestParamObj.success ? (_iniFnSuccess = requestParamObj.success, //逻辑1,请求参数定义success, 即成功回调函数,
 8         _fnSuccess = function (_data, textStatus, _jqXHR) {
 9             _data.success != undefined && _data.success === !1 && _data.message ? _fnError(_data.message) : _iniFnSuccess(_data, textStatus, _jqXHR)//返回值没有定义success属性,运行_fnSuccess
10         },
11         requestParamObj.success = _fnSuccess,//重新绑定success回调函数,而原来的success回调函数
12         $.ajax(requestParamObj)) : (dfd = $.Deferred(), //逻辑2,没有定义成功回调函数时,即requestParamObj.success=false
13             $.ajax(requestParamObj).then(function (n, r, u) {
14                 //then 当只有一个参数时,表示done回调函数,即成功返回时的回调
15                 if (n.success != undefined && n.success === !1 && n.message) {
16                     _fnError(n.message);
17                 }
18                 else {
19                     return dfd.resolve(n, r, u)
20                 }
21             }
22                 // ,function(n,r,u){  
23                 //     return dfd.resolve(n, r, u)//返回调用点:wz_popup@936 getMyTags
24                 // }
25             ), //当有2个参数,程序执行到这
26             dfd.promise()) //返回新的Deferred对象
27 };

当浏览器加载上面的代码时JS引擎从上至下执行,即从第7行开始执行,第10行之前requestParamObj.success还是外部声明的自定义success回调函数

第8行,重新封装回调,赋值给第11行,第9行:内部再调用原success回调函数

运行时,$ajax执行成功,回调第8行_fnSuccess

理解参数dataType: "json"

从服务端response的数据由$.ajax()方法转成json格式,即无需再使用 var i = JSON.parse(_data); 进行处理

posted @ 2021-01-26 12:06  轴轴  阅读(100)  评论(0编辑  收藏  举报