嗨我的脚本中有2个ajax调用,我需要它们运行异步来占用时间,但我需要第二个等待直到第一个完成。
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
if (parO2.length > 0) {
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO2,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
/*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
那么任何想法?感谢
答案 0 :(得分:16)
如果使用jQuery 1.5+,您可以使用jQuery.when()
来完成此任务。类似的东西(缩短了ajax要求简洁,只需按照上面的方式传递对象)
$.when($.ajax("getText.asmx/ws_getText"),
$.ajax("getText.asmx/ws_getText")).done(function(a1, a2){
// a1 and a2 are arguments resolved for the
// first and second ajax requests, respectively
var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ]
});
你不知道他们将以何种顺序返回,所以如果你手动滚动它,你需要检查另一个请求的状态并等到它返回。
答案 1 :(得分:1)
您需要连接第二个调用以包含在第一个ajax调用的回调中。像这样:
success: function(msg)
{
alert(msg.d.data);
if(par02.length > 0)
{
// Your 2nd ajax call
}
},
由于JavaScript不会在客户端上的多个线程中运行,因此在满足某些条件之前无法阻止该线程。
答案 2 :(得分:1)
使用jquery
$.ajax({
type: "POST",
async:false, // ** CHANGED **
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
答案 3 :(得分:0)
这是关于运行双ajax请求的另一个答案。与Tejs一样,用户在成功方法中进行ajax调用......
海报说明你最好让成功方法启动一个新的ajax请求。“