【问题标题】:How to cancel an ajax query (from jquery) on the server side?如何在服务器端取消 ajax 查询(来自 jquery)?
【发布时间】: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"的方式返回?

【问题讨论】:

    标签: php jquery ajax


    【解决方案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 状态)而不是响应正文进行操作。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2010-10-22
      • 2010-10-09
      • 2011-08-12
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多