如何在服务器端取消 ajax 查询(来自 jquery)?

Posted

技术标签:

【中文标题】如何在服务器端取消 ajax 查询(来自 jquery)?【英文标题】:How to cancel an ajax query (from jquery) on the server side? 【发布时间】:2010-09-22 10:57:01 【问题描述】:

听起来像一个奇怪的问题,但说我有这样的事情:

$.post( "/myajax.php",
         "param1": value1, "param2": value2 ,
        function( data, status ) 
            if( status == "success" ) 
               $("#someid").html( data );
            
        , "html" );

虽然 myajax.php 正在做它需要做的任何事情,但它决定不需要对#someid 进行任何更改。如果它只是返回,someid 元素将被空白,但我想不理会它。 php查询如何以status != "success"的方式返回?

【问题讨论】:

【参考方案1】:

检查返回的数据不是更简单吗?

$.post( "/myajax.php",  
        "param1": value1, 
        "param2": value2 
   , function( data, status ) 
       if( data != "" ) 
           $("#someid").html( data );
       
   , 
   "html" 
);

【讨论】:

是和否,我猜这两个都是非常基本的想法,返回非 200 OK 似乎更“正确”,因为它会更改状态代码。 但是您如何将其与真正的错误区分开来?我认为正确完成请求很重要。 @Eran - 我同意。使用 data 参数意味着您正在过滤服务器端代码的逻辑(正确),而不是 HTTP 事务(错误)。 此外,如果您返回 4xx 或 5xx 错误代码,然后决定在 $.ajax() 上为失败的 AJAX 请求放入错误处理程序,您最终会破坏现有的逻辑。 我最初接受了欧文的回答,但经过反思,我认为我更喜欢 Eran 的想法。他们都工作,FWIW,但我同意这更干净。【参考方案2】:

ajax 调用将任何200 OK 视为成功。因此,您可以从 PHP 脚本中返回其他内容来触发 ajax 错误。

here 是一些其他状态代码,以防您想选择更合适的东西。

编辑:我不一定不同意这种方法,但我仍然更倾向于对状态消息(http 状态)而不是响应正文进行操作。

我的想法是,在前面提到的后期事务中,您正在更新资源。可以合理地假设您期望发生两件事中的一件(在“成功”条件下):

    200 OK 表示内容发布时没有问题,并且结果响应通常是显示新内容。 ajax 方法通过允许您获取响应正文来更新您的 UI 来“强制执行”此行为。

    在不需要进行更新的情况下,200 OK 也可以(因为请求已按预期处理),但也许204 No Content 更好,因为它暗示了请求已实现,但无需更改视图。我倾向于相信这也更符合 ajax 调用,因为您可以忽略响应正文(因为没有)并在状态上操作(204?更新 UI 说“不需要更改”或类似的)

【讨论】:

以上是关于如何在服务器端取消 ajax 查询(来自 jquery)?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止AJAX服务器端传输?

服务器端 C# Websocket,如何在监听取消令牌时运行循环?

在服务器端分页上防止来自 jquery 数据表的多个 ajax 调用

如何取消 AJAX 长时间运行的 MVC 动作客户端(在 javascript 中)?

Ajax轮询——“定时的通过Ajax查询服务端”

在 Rails3 中选中或取消选中时,如何让复选框触发 ajax 调用?