//根据前面传过去的索引找到对应 Deferred 对象,将状态改成 resolve(表
示成功
)
deferredOBJ[data.Index].resolve();
}
else
{
//
如果请求出错
,将状态改成 reject (表示失败)
//这里调用 reject()后,会立即执行下面的 fail()函数
deferredOBJ[data.Index].reject(data.msg);
}
},
error:
function
(data, statu) {
alert("ajax 请求获取数据失败!");
}
});
}
//使用$.when() 来控制 3 个异步请求的流程,保证所有异步请求都完成后再执行
done 函数
$.when(deferredOBJ[0], deferredOBJ[1], deferredOBJ[2])
.done(
function
() {
var
result = "所有请求完成...";
$("#div_Content").append($("<p/>").text(result));
})
.fail(
function
(error) {
alert("从 JIRA 获取度量项数据失败, 请重试");
});
});
});
</script>
这里的巧妙之处在于
jsonData.Index = i; 这句代码,不然要就要写 3 个 ajax 请求,代码会显得
臃肿
.
如果不记录当前请求索引的话
,后面的 success,error 函数就无法找到对应的 Deferred 对象来
改变状态
.
可能大家会问
,为什么不用 deferredOBJ[i]来获取,这是因为请求都是异步的,在 success,error
函数里来获取
i 永远都是 2(因为 requestInfoArr.length 是 2).
让我们来验证一下这
3 个 ajax 请求是不是都是异步执行的.