2016-06-28 90 views
0

我有一个运行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  
+0

这是因为请求是异步的。将第二个AJAX调用*放入第一个调用的'success'处理程序中。还要注意,在'success'处理程序中使用'return'是多余的。 –

+0

为你的'$ .ajax'添加参数'async:false',或者,更好的办法是将第二个请求放在'success'回调中。 – eisbehr

+0

@eisbehr不,永远不要这样做。 'async:false'是*难以置信的*糟糕的做法。当请求正在进行时,它会阻止UI线程表单更新,这使得它看起来像浏览器崩溃了。这是大多数浏览器现在抛出关于其使用的控制台警告的原因。 –

回答

1

而不是把呼叫转移到第二AJAX方法在你的代码(在评论当前的)的底部,把它放在你的第一个电话的“成功”功能。这个方法只会在第一次调用完成后执行。这是确保第二次通话不会发生得太早的唯一方法。 Ajax调用异步运行,因此浏览器的正常流程不会中断。这是故意的,以便长时间运行的调用不会锁定用户的浏览器。

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 
} 
0

尝试这个办法:异步欢迎使用属性假

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; 
    } 
+1

千万不要使用'async:false',这是非常糟糕的做法。当请求正在进行时,它会阻止UI线程表单更新,这使得它看起来像浏览器崩溃了。这是大多数浏览器现在抛出关于其使用的控制台警告的原因。 –

+0

所以@ Dr.Avalanche可以在第一个ajax调用的成功函数中调用第二个ajax调用 –

0

你必须使用jquery promise功能为了等待第一个Ajax请求完成,然后再发出一个Ajax请求。

JQUERY PROMISE

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. 
     } 

希望它可以帮助它发生:)

相关问题