我一直在网上(显然是在错误的地方)寻找ajax(jquery post)目的的成功和失败标准。
例如,假设我正在使用 ajax 发布到 php 脚本。该脚本可以返回:
- 出口 0
- 1号出口
- 杰森数组
- 返回
- ETC...
这些返回值何时转化为成功,何时转化为失败?
您可能已经知道 $.ajax() 支持 beforeSend、success、error 和 complete 回调。
那么我的脚本在成功和失败的情况下应该发送什么来触发适当的回调。
本是对的,但我会扩大一点。
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 读取为失败,并调用错误处理程序。
进一步阅读:
RFC2616,它定义了 HTTP 响应代码
我相信它基于标头代码(即 200 - 成功)。您可以发回您自己的特殊错误,例如如何在 jQuery AJAX 响应中接收错误?
如果请求页面中的代码有问题,则不应出现 Ajax 错误。就 Ajax 而言,只要页面在物理上被成功请求,它就可以正常执行。所请求页面中的任何错误都不是 Ajax 的错误,因此应在成功加载该页面后由您的代码处理。使用上面链接中的自定义标题将使您更容易做到这一点。
Ajax 请求页面 --> 页面加载且没有错误 --> 页面请求成功 --> 您执行结果错误检查
对比
Ajax 请求页面 --> 页面加载并有错误 --> 页面请求成功 --> 您执行结果错误检查
如您所见,所请求的页面是否有错误无关紧要,这不是 Ajax 错误,因此不应视为错误。
您可以选择一种始终打印成功的模式,其他情况(如 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。