如何在服务器端取消 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)?的主要内容,如果未能解决你的问题,请参考以下文章
服务器端 C# Websocket,如何在监听取消令牌时运行循环?
在服务器端分页上防止来自 jquery 数据表的多个 ajax 调用