【问题标题】:success and failure criteria for ajax(jquery post) purposesajax(jquery post)目的的成功和失败标准
【发布时间】:2013-03-01 21:36:47
【问题描述】:

我一直在网上(显然是在错误的地方)寻找ajax(jquery post)目的的成功和失败标准。

例如,假设我正在使用 ajax 发布到 php 脚本。脚本可以返回:

  • 退出 0
  • 退出 1
  • 杰森数组
  • 返回
  • 等等……

这些返回值何时会转化为成功,何时会转化为失败?

您可能已经知道 $.ajax() 支持 beforeSend、success、error 和 complete 回调。

那么我的脚本在成功和失败的情况下应该发送什么来触发适当的回调。

【问题讨论】:

    标签: php ajax


    【解决方案1】:

    Ben 是对的,但我会扩大一点。

    jQuery 根据被调用页面的 HTTP 响应代码确定成功或失败。请注意,这与发回的响应中的内容相同。

    例如,假设您的 PHP 脚本位于 http://url.com/script.php

    当用户点击该站点时,他们将获得服务器的响应。该响应可以是 JSON 对象,也可以是 HTML 页面,也可以是空响应。 在所有这些情况下,响应代码很可能是 200。200 响应代码意味着服务器理解请求,接受它,然后发回一些东西。

    现在假设用户尝试点击http://url.com/notascript.php

    服务器不知道如何处理它(假设 notascript.php 实际上并不存在)。它使请求失败,并发回响应——可能带有响应代码 404(或 4xx 范围内的其他内容)。

    如果你知道实际的 URL,那么 jQuery 的错误处理程序是如何被调用的呢?

    好吧,假设您的 AJAX 调用正在尝试加载博客文章,并尝试进行如下调用:http://url.com/post?id=5。如果您的 PHP 脚本确定没有 ID 为 5 的博客条目,那么您可能不应该发回成功的响应。相反,4xx 响应会更合适。 PHP 有一个内置函数:

    <?php
    
    http_response_code(404);
    
    ?>
    

    现在,响应将被 jQuery 读取为失败,并调用错误处理程序。

    进一步阅读:

    http_response_code() function

    RFC2616,定义HTTP响应码

    REST

    【讨论】:

    • 这也取决于定义的dataType。如果你告诉 jQuery 你期待的是 json,但你没有收到 json,那么即使响应码是 200,它也会被认为是一个错误。
    【解决方案2】:

    我相信它基于标头代码(即 200 - 成功)。您可以将自己的特殊错误发回,例如How to receive error in jQuery AJAX response?

    如果您请求的页面中的代码有问题,则不应出现 Ajax 错误。就 Ajax 而言,只要页面在物理上被成功请求,它就可以正常执行。所请求页面中的任何错误都不是 Ajax 的错误,因此应在成功加载该页面后由您的代码处理。使用上面链接中的自定义标题将使您更容易做到这一点。

    Ajax 请求页面 --> 页面加载且没有错误 --> 页面请求成功 --> 您执行结果错误检查

    Ajax 请求页面 --> 页面加载并有错误 --> 页面请求成功 --> 您执行结果错误检查

    如您所见,所请求的页面是否有错误无关紧要,这不是 Ajax 错误,因此不应视为错误。

    【讨论】:

    • 这就是为什么您在成功块中编写自己的处理方式的原因。我相信错误出在纯 Ajax 调用上,即它无法完成您的请求。成功意味着它基本上只能加载您的页面。之后的调试不是 Ajax 错误(加载页面本身没有问题),而是正在加载的页面上的错误。我会扩展我的答案。
    【解决方案3】:

    您可以选择一种总是打印成功的模式,其他情况(如 ajax 失败)可以通过 AJAX 本身(HTTP 响应代码)知道:例如:

    You always print: yes for success and if correct result found
    
    You always print: no for success and if incorrect result found
    

    如果以上都没有返回,那么它的 ajax 失败或者如果脚本打印另一个单词,那么你需要检查你的 PHP。

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2013-02-09
      • 2011-03-30
      • 2011-04-04
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多