前言
最近在一个单节点根据
速度的
功能页面的逻辑速度测量的
上传速度,前5m数据到
服务器,并返回数据记录上传时间测得的
下载速度,从服务器下载1M的数据,下载和下载的成功记录,上传和下载使用AJAX是
同步的避免客户带宽拥塞,和3倍的平均水平。在发展过程中,由于AJAX同步异步问题,采取了很多的曲线,特别是以前的业务逻辑整理总结。
Ajax请求
方法如下所示
首先,常见的Ajax异步同步异步
处理。成功后,将有数据返回值,状态请求的状态,并将XHR请求标头,但应该指出的是,并不是所有的请求头信息可以获得,例如,中心长度不可用。
$ ajax({
键入:获取
异步:真的,
默认的是真实的 / /异步
执行 网址,
DataType:JSON
/ / JSONP回调
成功:功能(数据、状态、XHR){
console.log(数据); / /返回值
console.log(状态); / /状态
console.log(XHR); / /
目标 console.log(xhr.getresponseheader(内容
类型)); / / /字节流中的应用
console.log(xhr.getresponseheader(中心长度)); / /空
}
});
二、有时遇到的业务逻辑是这样的。请求2取决于请求1的结果。请求3取决于请求2的结果。如果写回调,它会很长,有两种方法可以
解决它。首先,让我们看看在ES5的解决方案。
(1)对ES5的解决方案是AJAX同步。默认Ajax是异步的,也就是说,同时执行多个请求。改变同步后,Ajax执行一个接一个,所以ajax2可以得到ajax1返回结果。
让RES1 =
让RES2 =
$ ajax({
类型:' ',
异步:假,默认是真实的 / /同步异步
网址:pars.domain + / API。phpaction = xxxdate = 2017-03-08t =+(新)GetTime(),
DataType:'json,
成功:
函数(RES){
如果(res.code = = 0){
res.data RES1 =带宽{ 0 }。
其他{ }
}
}
});
$ ajax({
类型:' ',
异步:假,默认是真实的 / /同步异步
网址:pars.domain + / API。phpaction = xxxdate = 2017-03-08dom1111+RES1 + T =+(新)GetTime(),
DataType:'json,
成功:功能(RES){
如果(res.code = = 0){
RES2 = res.data带宽{ 0 }。
其他{ }
}
}
});
(2)6的溶液,然后用承诺的方法,效果相同,Ajax会按
顺序执行,和Ajax会以前阿贾克斯的价值,所以代码看起来会光滑。
允许新的承诺(函数(解析,拒绝){
让URL = pars.domain + / API。phpaction =×= 2017-03-08t =+(新)GetTime()。
让ajax = $(URL,函数(RES){)
如果(res.code = = 0){
解决(资源数据);
}
别的{
}
},JSON;
console.log(请求亲成功);
});
手术成功,术后异常处理。
Pro.then(请求)
然后(requestb)。
然后(requestc)。
抓住(requesterror);
功能请求(RES){
console.log(结果的最后一步:GM+Res);
console.log(请求成功);
让新的承诺(ProA =功能(解决,拒绝){ {
让URL = pars.domain + / API。phpaction = xxxdate = 2017-03-08t =+(新)GetTime()。
让ajax = $(URL,函数(RES){)
如果(res.code = = 0){
解决(资源数据);
}
别的{
}
},JSON;
});
返回ProA
}
功能requestb(RES){
console.log(结果的最后一步:GM+Res);
console.log(请求B成功);
设概率=新的承诺(函数(解析,拒绝){
让URL = pars.domain + / API。phpaction = xxxdate = 2017-03-08t =+(新)GetTime()。
让ajax = $(URL,函数(RES){)
如果(res.code = = 0){
解决(资源数据);
}
别的{
}
},JSON;
});
返回的问题
}
功能requestc(RES){
console.log(结果的最后一步:GM+Res);
console.log(请求成功);
让新的承诺(函数(解析,拒绝){)
让URL = pars.domain + / API。phpaction = xxxdate = 2017-03-08t =+(新)GetTime()。
让ajax = $(URL,函数(RES){)
如果(res.code = = 0){
解决(资源数据);
}
别的{
}
},JSON;
});
返回过程
}
功能requesterror(){
console.log(请求失败);
}
三、JSONP跨域,动态添加一个script标签来实现跨域,注意有回调的需要与服务器协商
功能switchengineroomajax(API,statuschanged){
api;
无功statuschanged = statuschanged;
var url = API +方法= SetStatus+状态=+ statuschanged;
$ ajax({
键入:获取
网址,
DataType:JSONP
JSONP:回调 / /回调由前收到后,通过动态地添加
脚本标签,完成回调
成功:函数(RES){
如果(res.code = = 0){
console.log(
显示状态JSONP获取数据成功!);
}
别的{
}
}
});
};
四,同样会遇到这样的业务逻辑,ajax1 ajax2 ajax3,三异步请求,不一定是第一个返回数据,在请求成功,执行一个回调函数,需要注意的是,单独的Ajax也需要新的重要保证。
ajax1:函数(){
新承诺(函数(解析,拒绝){)
var url = / API。phpaction = xxx;
获取(URL,函数(RES){)
如果(res.code = = 0){
解决('querylog完了!);
}
别的{
}
},JSON;
});
回报承诺
},
ajax2:函数(){
新承诺(函数(解析,拒绝){)
var url = / API。phpaction = xxx;
获取(URL,函数(RES){)
如果(res.code = = 0){
解决('querygroupnodelist完了!);
}
别的{
}
},JSON;
});
回报承诺
},
ajax3:函数(){
新承诺(函数(解析,拒绝){)
var url = / API。phpaction = xxx;
获取(URL,函数(RES){)
如果(res.code = = 0){
解决('querygroupnodemaplist完了!);
}
别的{
}
},JSON;
});
回报承诺
},
initquery:函数(){
var =;
无功promiselist = { };
无功ajax1promise = myself.ajax1();
无功ajax2promise = myself.ajax2();
无功ajax3promise = myself.ajax3();
PromiseList.push(ajax1promise,ajax2promise,ajax3promise);
新的承诺(函数(解析,拒绝){
console.log('
创建一个1.2秒的延迟履行承诺);
setTimeout(){()函数(
解析(1.2秒延迟承诺);
},1200);
});
PromiseList.push(P1)
promise.all(promiselist)。然后(功能(结果){)
console.log('ajax全部结束:+ json.stringify(结果)); / / 你好 {
myself.assembletabledata();
});
},
总结
以上就是本文的全部内容。希望本文的内容能给大家的
学习或
工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的
支持。