2011-07-20 74 views
1

我有這個代碼工作。如何在成功爲false時停止執行jQuery .ajax()?

$.ajax({ 
           type: "GET", 
           url: "includes/process.php", 
           data: "captcha=" + captcha, 
           success:function(data){ 
            if(data=='true') 
             alert("OK"); 
            else 
             alert("not ok"); 

           } 
          }); 

但是我有後,像一些更多的代碼:

var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone + '&message=' + message; 

           $.ajax({ 
           type: "POST", 
           url: "bin/process.php", 
           data: dataString, 
.. 
. 
. 

. 

不過,我需要停止腳本時成功:功能(數據)是假的。

所以,我認爲,應該return false;停止執行

success:function(data){ 
if(data=='true') 
alert("OK"); 
else { alert("not ok"); return false; } 
} 

,但它是不工作,$.ajax後的代碼也仍會執行。

如何在successfalse時停止腳本?

有什麼建議嗎?提前致謝。

附加信息: 我還有一個Ajax調用,我想執行的時候成功是正確的:

var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone + '&message=' + message; 
$.ajax({ 
type: "POST", 
url: "bin/process.php", 
data: dataString, 
success: function() { 
    alert ('mail was sent OK')         
} 
}); 

如何只有第一個Ajax調用成功後執行該代碼?

+0

如果錯誤,那麼你可以使用'error:function(data){}'擴展你的'.ajax'函數。 –

回答

4

你的額外代碼應該在回調本身。

$.ajax({ 
    type: "GET", 
    url: "includes/process.php", 
    data: "captcha=" + captcha, 
    success: function(data) { 
     if (data == 'true') { 
      alert("OK"); 
      // more code 
      var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone + '&message=' + message; 
      // ... second ajax call 
     } else { 
      alert("not ok"); 
     } 

    } 
}); 
+0

但我有另一個Ajax電話,檢查我的帖子,我已經更新了我的代碼。這會運行嗎? – marian

+1

@marian,你可以在第一個Ajax調用的'success'的'if'裏面做另一個ajax調用。 – Dogbert

+0

thx dogbert,它正在工作 – marian

0

由於$.ajax()是異步的,所以之後的代碼將會執行。你可以把代碼放在success處理程序中。這樣,只有成功才能運行。

0

AJAX是一個異步調用(因此是第一個'A')。這意味着jQuery在等待完成調用的同時提出請求並繼續進行業務。

0

$.ajax之後的代碼通常在success函數之前執行,因爲$.ajax調用是異步的。如果你保持異步,你不能停止執行其他代碼。你可以在success的外部範圍內設置一個變量的函數值並使用syncronous代碼。但是也許最好將它移入一個函數中,由success回調調用?無論如何,爲了得到更好的答案,請張貼更多的代碼。

1

可以
1)你的額外代碼添加到回調函數成功

$.ajax({ 
     type: "GET", 
     url: "includes/process.php", 
     data: "captcha=" + captcha, 
     success:function(data){ 
      if(data=='true') { 
      alert("OK"); 
      //continue here 
      var datastring = ... 
      } 
      else 
      alert("not ok"); 
     } 

});

2)加入該選項的阿賈克斯調用

var isSuccess = false; 
$.ajax({ 
     type: "GET", 
     url: "includes/process.php", 
     data: "captcha=" + captcha, 
     success:function(data){ 
      isSuccess = (data=='true'); 
     }, 
     async: false 
    }); 

然後你就可以在你的成功的功能設置VAR改變調用Ajax不是異步告訴你的代碼的其餘部分是否繼續或不。

0

試試這個:

$.ajax({ 
    type: "GET", 
    url: "includes/process.php", 
    data: "captcha=" + captcha, 
    success: function(data) { 
     if (data.length) { 
      alert("OK"); 
      doMoreStuff(data); 
     } 
    } 
}); 

function doMoreStuff(data){ 
    // Code here will only be executed if ajax call is successful. 
} 
1

您還可以添加async:false到您的AJAX調用。這樣,之後的代碼將不會執行,直到請求結束。 return false也不會做任何事情,但你可以在成功功能中設置一個標誌。

var isOk = false; 
$.ajax({ 
    type: "GET", 
    async: false, // prevent the asynchronous call 
    url: "includes/process.php", 
    data: "captcha=" + captcha, 
    success: function(data) { 
     if (data.length) { 
      alert("OK"); 
      isOk = true; 
     } 
    } 
}); 

if (isOk) { 
    // do your stuff 
}