我有一个运行2个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
答案 0 :(得分:1)
不要将调用放在代码底部的第二个ajax方法(当前注释的位置),而是将其置于第一次调用的“成功”功能中。此方法仅在第一次调用完成后执行。这是确保第二次调用不会过早发生的唯一方法。 Ajax调用是异步运行的,因此浏览器的正常流程不会中断。这是故意的,因此长时间运行的调用不会锁定用户的浏览器。
答案 1 :(得分:0)
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
}
答案 2 :(得分:0)
试试这个:make async propety false
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;
}
答案 3 :(得分:0)
你必须使用jquery promise
函数来等待第一个ajax请求完成然后再发出另一个ajax请求。
<强> JQUERY PROMISE 强>
或强>
将第二个ajax
请求放入第一个success function
中,并在您希望触发时将其发生
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.
}
希望有所帮助:)