jQuery停止异步运行的ajax [重复]

Posted

技术标签:

【中文标题】jQuery停止异步运行的ajax [重复]【英文标题】:jQuery stop ajax running asynchrously [duplicate] 【发布时间】:2016-03-15 09:23:31 【问题描述】:

有没有办法防止 ajax 异步运行?

jQuery:

var returnValue = false;
        var appCount = 0;

        $.ajax(
            type: "GET",
            url: "getBookedAppointmentCountByDoctorAndDate.php",
            data: dataString,
            success: function (response)
                appCount = response;
                //alert(appCount);
                if(appCount >= 6)

                    returnValue = true;
                
            
        );
        return returnValue;

我的代码中有一个 if 语句来检查这个函数的返回值。因为 Ajax 运行异步,所以 if 语句在返回值设置之前继续。其他方法用于返回 php 值的任何想法或建议?

if (blah($(this)) === true) 
                    alert("blah");
                 else  ...

【问题讨论】:

有办法,但这里真正的答案是,你永远不应该这样做 在你的请求中,你必须做 async: false api.jquery.com/jQuery.ajax How do I return the response from an asynchronous call? 你永远不应该在浏览器上使用同步方法,因为冻结了主线程。要在 ajax 调用结束时“返回”一个值,您应该使用回调(或者,更进一步,返回一个承诺)。 【参考方案1】:

将参数async: false添加到ajax参数http://api.jquery.com/jquery.ajax/,ajax请求时浏览器将处于非活动状态,因此不是一个好的决定。

最好将if statement移动到ajax成功函数,或者用if statement制作函数并在成功函数中调用。

【讨论】:

我想你的意思是async: false 请将此标记为正确答案。【参考方案2】:

你在函数中使用了这个 sn-p,对吧?既然你有 return 声明,我猜是这样。

您不能返回将在异步任务中确定的值。您可以做的是向该函数传递一个回调函数,当值确定后,将值传递给该函数并调用它。

function myFunc(callback) 

    var returnValue = false;
    var appCount = 0;

    $.ajax(
        type: "GET",
        url: "getBookedAppointmentCountByDoctorAndDate.php",
        data: dataString,
        success: function (response)
            appCount = response;
            //alert(appCount);
            if(appCount >= 6)
                returnValue = true;
            
            callback(returnValue);
        
    );




myFunc(function (value) 
    console.log(value);
    // do what ever you want with `value`
)

另一种方法是使用Promise。如果你想使用 jQuery 的 promise,这里是 documentations

【讨论】:

以上是关于jQuery停止异步运行的ajax [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jquery的同步和异步

ajax同步异步问题

jQuery Validator异步调用[重复]

如何在jquery中停止Ajax调用[重复]

ajax同步与异步的区别

停止并继续javascript函数[重复]