2011-07-20 19 views
1

私はこのコードを使用しています。機能(データ)はfalseです:成功がfalseの場合、jQuery .ajax()の実行を停止する方法は?

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

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

. 

など

は、しかし、私は成功の時にスクリプトを停止する必要があります。

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

           } 
          }); 

は、しかし、私はそのような後にいくつかのより多くのコードを持っています。

だから、私は、return false;が実行

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

を止めるべきであると考えたが、それが動作していないと$.ajax後のコードはとにかく実行されます。

successfalseの場合にスクリプトを停止する方法はありますか。

アドバイスはありますか?前もって感謝します。

ADDITIONAL INFO: 私は成功がtrueの場合に実行する別のAJAX呼び出しがあります:最初の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')         
} 
}); 

を?

+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呼び出しの '成功'の 'if'の中で、他のajax呼び出しを行うことができます。 – Dogbert

+0

thx dogbert、それは働いています – marian

0

$.ajax()は非同期なので、それ以降のコードはとにかく実行されます。コードをsuccessハンドラに入れることができます。そうすれば、成功した場合にのみ実行されます。

0

AJAXは非同期呼び出しです(したがって最初の 'A')。これは、jQueryがリクエストを行い、コールが完了するのを待っている間、そのビジネスについて継続することを意味します。

0

$.ajax呼び出しが非同期であるため、$.ajaxの後のコードは、通常、success関数の前に実行されます。非同期のままにすると、他のコードの実行を停止することはできません。外側のスコープ内の変数の関数値をsuccessに設定し、同期コードを使用することができます。しかし、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を設定することができアヤックスコール

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

には、このオプションを追加することで、非同期ではないとAJAX呼び出しを変更か否か。また、あなたのAJAX呼び出しにasync:falseを追加することができ

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

はこれを試してみてください。この方法では、afterコードは要求が終了するまで実行されません。 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 
} 
1

関連する問題