Tim*_*Tim 1 javascript ajax jquery promise q
我有一个函数,我需要在几个Ajax调用完成后运行.每个AJAX调用目前一个接一个地调用,并且当前在各自的回调中工作.这是一个承诺链的候选者,因为每个ajax调用仅在其各自的测试为真时运行吗?并且我不一定需要这些调用是串行运行的,因为我在最后得到一个回调(当满足要运行的条件的所有Ajax调用完成它们各自的回调时).
if(MyTest1){
RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1);
}
if(MyTest2){
RunMyAjaxCall2(param1,param2,successAjaxCallback2,failureAjaxCallback2);
}
if(MyTest3){
RunMyAjaxCall3(param1,param2,successAjaxCallback3,failureAjaxCallback3);
}
if(MyTest4){
RunMyAjaxCall4(param1,param2,successAjaxCallback4,failureAjaxCallback4);
}
Run Code Online (Sandbox Code Playgroud)
AJAX调用示例
RunMyAjaxCall1 = function (param1,param2, successCallback, failureCallback) {
$.ajax({
type: "POST",
datatype: 'json',
url: "/WebServices/GlobalWebService.asmx/webservicemethod1",
data: JSON.stringify({ param1: param1, param2: param2 }),
contentType: 'application/json; charset=utf-8',
success: function (data) { successCallback(data.d); },
error: function (data) { failureCallback(data.d) }
});
}
Run Code Online (Sandbox Code Playgroud)
你可以用这个:
var requests = [];
if (MyTest1) {
requests.push(RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1));
}
// ...continue with other if statements
$.when.apply(null, requests).always(function () {
// All handlers used are done (either succeeded or failed)
});
Run Code Online (Sandbox Code Playgroud)
既然你说你正在进行AJAX调用,我假设你正在使用它$.ajax.调用返回的值$.ajax是a Promise.该RunMyAjaxCallX功能需要,以便返回此该方案的工作.
使用requests允许动态方式分组请求.这些if语句决定了哪些被执行和包含.
使用$.when(requests作为参数传递)创建一个新的Promise,包含您确定应包含的所有请求.然后使用该.always()方法,它将在所有包含的请求完成时运行.
这是一个工作的例子: http ://jsfiddle.net/vmw8H/
一些参考:
http://api.jquery.com/jQuery.when/
http://api.jquery.com/deferred.always/
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |