等到jquery ajax请求完成并返回值

Posted

技术标签:

【中文标题】等到jquery ajax请求完成并返回值【英文标题】:Wait until jquery ajax request is done and return value 【发布时间】:2013-02-21 07:26:30 【问题描述】:

我想等到 ajax 调用完成并返回值。

function isFileExists(url) 
    var res = false;
    $.ajax(
        type: "GET",
        async: false,
        url: url,
        crossDomain: true,
        dataType: "script",
        success: function () 
            res = true;
        ,
        error: function () 
            res = error;
        ,
        complete: function () 

        
    );
    return res; //It is always return false

我想返回值“true/error”

请帮帮我。

【问题讨论】:

下次考虑使用 jquery 标签而不是 javascript,它会使其更具体并节省人们的时间。谢谢 【参考方案1】:

你不能这样做。这不是 ajax 的工作方式。您不能依赖在任何给定时间完成的 ajax 请求......或 ever 完成。您需要做的任何工作都基于 ajax 请求必须在 ajax 回调中完成。

jQuery 使得绑定回调变得容易(因为 jQuery 的 ajax 方法返回的 jqXHR 实现了 Deferred):

var jqXHR = $.ajax(/* snip */);

/* millions of lines of code */

jqXHR.done(function () 
    console.log('true');
).fail(function () 
    console.log('false');
);

附:如果您将async 设置为false,您可以做您想做的事情,但这会在请求运行时锁定浏览器。不要这样做。那么你就只有 jax。

编辑:您不能将crossDomain: trueasync: false 结合使用。跨域必须是异步的。

【讨论】:

你的意思是 asyncfalse @ExplosionPills :我正在从另一个函数调用 isFileExists(url)。如何调用 jqXHR @Sagar 在isFileExistsreturn $.ajax(...)。然后你可以像isFileExists(url).done(function () 一样使用它 @ExplosionPills isFileExists(url).done(function () //这里我要结果值我怎样才能得到它); @Sagar 是服务器发送的结果值吗?然后就做.done(function (resultValue) 【参考方案2】:

也许这对你有用:

function isFileExists(url, init) 
    var res = null;
    var _init = init || false;

    if (!_init) 
        _init = true;
        $.ajax(
             type: "GET",
             url: url,
             crossDomain: true,
             dataType: "script",
             success: function () 
                 res = true;
             ,
             error: function () 
                 res = 'error';
             ,
             complete: function () 

             
        );
    

    if (res==null) 
        setTimeout(function() isFileExists(url, _init); , 100);
     else 
        return res;
    

我测试了一下,但没有跨域。

【讨论】:

是的,它应该被调用,直到 ajax 请求得到解决。尝试将“超时”设置添加到 ajax 调用中,将其设置为 1 分钟(也许),作为逃避的手段。【参考方案3】:

试试这个代码。它对我有用。

 function getInvoiceID(url, invoiceId) 
        return $.ajax(
            type: 'POST',
            url: url,
            data:  invoiceId: invoiceId ,
            async: false,
        );
    
    function isInvoiceIdExists(url, invoiceId) 
        $.when(getInvoiceID(url, invoiceId)).done(function (data) 
            if (!data) 

            
        );
    

【讨论】:

以上是关于等到jquery ajax请求完成并返回值的主要内容,如果未能解决你的问题,请参考以下文章

jQuery自动完成ajax请求不显示返回的数据

jQuery ajax,等到 beforeSend 动画完成

Javascript:等到ajax请求完成关闭页面[重复]

现需要使用 jQuery 代码实现 ajax 请求,详细信息如下

来自 for 循环内的 AJAX 链中最后一个 AJAX 请求的返回值

jquery 多个ajax()请求。