今天被问到这个问题,被问当时毫无头绪,只非常抽象的回答了一些可能的网络问题。感觉当时的回答非常不好,下班之后就继续思考这个问题的答案。思考的问题的过程中突然想到最近才了解到的jquery.deferred,jquery.deferred对ajax请求的结果主要会进行两种情况
今天被问到这个问题,被问当时毫无头绪,只非常抽象的回答了一些可能的网络问题。感觉当时的回答非常不好,下班之后就继续思考这个问题的答案。思考的问题的过程中突然想到最近才了解到的jquery.deferred,jquery.deferred对ajax请求的结果主要会进行两种情况的处理,done和fail.想到这里,突然脑海中灵光一闪:原来这个问题考的是http状态码。到了这一步,标题中的答案突然明朗了。
接下来只要确定在所有的http状态码里面哪些是表示成功,哪些是表示失败,就可以完全解答这个问题。
网络上的一些文档里面有http状态码的描述,但是没有明确说明成功和失败,这里,我们通过代码进行一下检测。
服务器端代码http.php用来返回指定的状态吗
<?php /** * Created by PhpStorm. * User: bandit * Date: 13/12/2014 * Time: 12:09 */ http_response_code($_REQUEST['code']);
通过同步的ajax请求获取成功和失败的状态码
<meta charset="UTF-8"> <title></title> <script src="http://blog.icodeu.com/" http:></script> <script type="application/javascript"> var codes = [100,101,102,200,201,202,203,204,205,206,207,300,301,302,303,304,305,306,307,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,424,425,426,449,500,501,502,503,504,505,506,507,509,510]; var suc = []; var fail = []; $.ajaxSetup({async:false}); for(var i in codes){ $.ajax({ type: "POST", url: "http.php", data: {"code":codes[i]} }) .done(function(){ suc.push(codes[i]);}) .fail(function(){ fail.push(codes[i]);}) } console.log(suc.toString()); console.log("'-------------------------------------------'); console.log(fail.toString()); </script>
通过chrome console里面返回的内容,我们就可以知道你哪些是成功的哪些是失败的。
200,201,202,203,204,205,206,207,304 VM2169:15
——————————————-
100,101,102,300,301,302,303,305,306,307,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,421,422,424,425,426,449,500,501,502,503,504,505,506,507,509,510
简单来说200范围以及304的状态码都是表示成功的,其他均表示失败。关于状态码的描述则就是我们这篇文章的答案。
关于状态码的更详细信息请参考维基百科
原文地址:http请求失败有哪些原因, 感谢原作者分享。