jQuery 中止请求

Posted

技术标签:

【中文标题】jQuery 中止请求【英文标题】:jQuery aborting request 【发布时间】:2013-04-24 12:59:00 【问题描述】:

jQuery 有一些中止 API,可用于尝试中止请求。 jQuery 真的可以自己决定中止 Ajax 请求吗?

例如,假设有一堆 Ajax 请求正在运行,其中一个返回了一些奇怪的东西,因此 jQuery 决定中止所有其他请求。

这会发生吗?

【问题讨论】:

【参考方案1】:

除了timeout 选项,一般jQuery 不决定。 决定。

常规是始终参考$.ajax() 返回的内容。

意思是,不要只调用$.ajax(),而是这样做,xhr = $.ajax()

$.ajax() 返回一个 jqXHR 对象,它只是 Ajax 功能的 jQuery 包装器。见http://api.jquery.com/jQuery.ajax/

现在您有了xhr,您可以从任何地方拨打xhr.abort()

实际上取决于您如何设计它,但调用 .abort()。以下可能是一种可能的用例。

一个轮询函数,另一个检查用户是否空闲太久的函数。

如果用户空闲,中止轮询 ajax,然后可能会提示一条消息,警告用户会话结束。

示例用例:

var mainXHR; // this is just one reference. 
             // You can of course have an array of references instead

function mainPollingFunction () 
    mainXHR = $.ajax(
        url: 'keepAlive.php',
        // more parameters here
        timeout: 10000, // 10 seconds
        success: function () 
            // server waits 10 seconds before responding
            mainPollingFunction(); // initiate another poll again
        
    );


// Let's say this function checks if the user is idle
// and runs when a setTimeout() is reached
function otherFunction () 
    if ( /* if user is idle */ ) 
        if (mainXHR) mainXHR.abort(); // abort the ajax in case it's still requesting
    

【讨论】:

以上是关于jQuery 中止请求的主要内容,如果未能解决你的问题,请参考以下文章

如何取消/中止 jQuery AJAX 请求?

jQuery UI 自动完成:中止请求

使用 jQuery deferred 中止 AJAX 请求链

使用 jQuery 中止 JSONP ajax 请求

使用 jQuery 中止待处理/积压的 AJAX 请求

错误:“CSRF 验证失败。请求中止。”在 Django 中使用 jquery ajax 时