在继续使用脚本之前等待AJAX响应
我有一个运行2个AJAX调用的脚本,这是第一次检查数据库中是否存在记录。如果是这样,则不应该继续,脚本应该停止。第二个提交工作。在继续使用脚本之前等待AJAX响应
我的问题是,在第一次AJAX调用返回之前,该作业正在提交。我的代码看起来是这样的:
if (recordid) {
var request = $.ajax({
context: document.body,
url: URLGOESHERE,
data: {
recordID: recordid
},
success: function(data){
if (data.Response == "Success") {
var noresults = data.Results;
if (noresults > 0){
alert('this record id already exists!');
return false;
}
} else {
alert('an error occured');
return false;
}
}
});
} else {
alert('enter a record id');
return false;
}
// second ajax call goes here, which gets called regardless of the output of the ajax call above
而不是把呼叫转移到第二AJAX方法在你的代码(在评论当前的)的底部,把它放在你的第一个电话的“成功”功能。这个方法只会在第一次调用完成后执行。这是确保第二次通话不会发生得太早的唯一方法。 Ajax调用异步运行,因此浏览器的正常流程不会中断。这是故意的,以便长时间运行的调用不会锁定用户的浏览器。
if (recordid) {
var request = $.ajax({
context: document.body,
url: URLGOESHERE,
data: {
recordID: recordid
},
success: function(data) {
//check here if you want to call submitJob or not
//and call submitJob()
}
});
} else {
alert('enter a record id');
return false;
}
//call this ajax once you varified your condition from success callback of first one
function submitJob() {
//second ajax call goes here
}
尝试这个办法:异步欢迎使用属性假
if (recordid) {
var request = $.ajax({
context: document.body,
url: URLGOESHERE,
data: {
recordID: recordid
},
async : false, //added this
success: function(data){
if (data.Response == "Success") {
var noresults = data.Results;
if (noresults > 0){
alert('this record id already exists!');
return false;
}
} else {
alert('an error occured');
return false;
}
}
});
} else {
alert('enter a record id');
return false;
}
OR 执行第一Ajax调用成功函数第二AJAX调用即见注释
if (recordid) {
var request = $.ajax({
context: document.body,
url: URLGOESHERE,
data: {
recordID: recordid
},
success: function(data){
if (data.Response == "Success") {
var noresults = data.Results;
if (noresults > 0){
alert('this record id already exists!');
return false;
}
//perform 2nd ajax call here
} else {
alert('an error occured');
return false;
}
}
});
} else {
alert('enter a record id');
return false;
}
千万不要使用'async:false',这是非常糟糕的做法。当请求正在进行时,它会阻止UI线程表单更新,这使得它看起来像浏览器崩溃了。这是大多数浏览器现在抛出关于其使用的控制台警告的原因。 –
所以@ Dr.Avalanche可以在第一个ajax调用的成功函数中调用第二个ajax调用 –
你必须使用jquery promise
功能为了等待第一个Ajax请求完成,然后再发出一个Ajax请求。
OR
将在第一个的success function
第二ajax
要求,使当你想它开火
if (recordid) {
var request = $.ajax({
context: document.body,
url: URLGOESHERE,
data: {
recordID: recordid
},
success: function(data) {
//check here if you want to call submitJob or not
if (noresults > 0){ return false }
else { Job(); };
}
});
} else {
alert('enter a record id');
return false;
}
function Job() {
//another ajax call.
}
希望它可以帮助它发生:)
这是因为请求是异步的。将第二个AJAX调用*放入第一个调用的'success'处理程序中。还要注意,在'success'处理程序中使用'return'是多余的。 –
为你的'$ .ajax'添加参数'async:false',或者,更好的办法是将第二个请求放在'success'回调中。 – eisbehr
@eisbehr不,永远不要这样做。 'async:false'是*难以置信的*糟糕的做法。当请求正在进行时,它会阻止UI线程表单更新,这使得它看起来像浏览器崩溃了。这是大多数浏览器现在抛出关于其使用的控制台警告的原因。 –