如果成功为false,如何停止执行jQuery .ajax()?

时间:2011-07-20 15:37:47

标签: php javascript 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,
..
.
.

. 

但是,我需要在成功时停止脚本:function(data)为false。

所以,我认为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调用成功后执行此代码?

7 个答案:

答案 0 :(得分: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");
        }

    }
});

答案 1 :(得分: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)通过在.ajax调用中添加此选项,将ajax调用更改为不异步

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

然后,您可以在成功函数中设置var,以告知代码的其余部分是否继续。

答案 2 :(得分:1)

您还可以在AJAX调用中添加async:false。这样,在请求结束之后,代码将不会执行。 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
}

答案 3 :(得分:0)

由于$.ajax()是异步的,因此无论如何都会执行代码。您可以将代码放在success处理程序中。这样,它只有在成功时才会运行。

答案 4 :(得分:0)

AJAX是一个异步调用(因此第一个'A')。这意味着jQuery会发出请求,然后在等待调用完成时继续处理它的业务。

答案 5 :(得分:0)

$.ajax之后的代码通常在success函数之前执行,因为$.ajax调用是异步的。如果保持同步,则无法停止执行其他代码。您可以在外部作用域中设置变量的success函数值,并使用同步代码。但也许最好将它移动到success回调调用的函数中?无论如何,为了得到更好的答案,请发布更多代码。

答案 6 :(得分: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.
}