ajax - HTTP请求返回状态码0时的含义是什么?

JavaScript网络调用(例如fetch或XMLHttpRequest)或任何其他类型的HTTP网络请求在HTTP状态代码为0时失败意味着什么?

这似乎不是有效的HTTP状态代码,因为其他代码在HTTP规范中是三位数。

我尝试完全拔掉网络作为测试。 它可能是不相关的,但导致状态代码17003(IIRC),粗略搜索建议意味着“DNS服务器查找失败”。

相同的代码可以在某些位置和系统中正常工作,但在某些环境中,它会因状态代码0而失败,并且没有提供responseText。

这是Internet URL的典型HTTP POST。 它不涉及[file://]我理解可能会返回0表示在Firefox中成功。

13个解决方案

153 votes

这里的许多答案都是错误的。 似乎人们在他们的特定情况下弄清楚导致状态== 0的原因然后将其概括为答案。

实际上,对于失败的XmlHttpRequest,status == 0应被视为未定义的错误。

实际的W3C规范定义了返回零的条件:   [https://fetch.spec.whatwg.org/#concept-network-error]

正如您从spec(fetch或XmlHttpRequest)中看到的那样,此代码可能是在联系服务器之前发生错误的结果。

产生此状态代码的一些常见情况会反映在其他答案中,但可能是这些问题中的任何一个或没有:

非法交叉来源请求(请参阅CORS)

防火墙阻止或过滤

请求本身已在代码中取消

已安装的浏览器扩展程序正在解决问题

有用的是浏览器为更多这些状态== 0场景提供详细的错误报告。 实际上,有时status == 0会伴随有用的控制台消息,但在其他情况下则没有其他信息。

whitneyland answered 2019-07-29T10:11:49Z

45 votes

我相信错误代码表明响应是空的(因为甚至没有返回标题)。 这意味着连接已被接受,然后正常关闭(TCP FIN)。有许多事情可能导致这种情况,但根据您的描述,某种形式的防火墙似乎是最可能的罪魁祸首。

Nick answered 2019-07-29T10:10:22Z

33 votes

对于它的价值,取决于浏览器,基于jQuery的AJAX调用将使用HTTP状态代码0调用您的成功回调。我们发现状态代码为“0”通常意味着用户之前导航到不同的页面 AJAX调用已完成。

与您使用的技术堆栈不同,但希望对某些人有用。

Cory R. King answered 2019-07-29T10:12:20Z

13 votes

wininet.dll返回下面列出的标准和非标准状态代码。

401 - Unauthorized file

403 - Forbidden file

404 - File Not Found

500 - some inclusion or functions may missed

200 - Completed

12002 - Server timeout

12029,12030, 12031 - dropped connections (either web server or DB server)

12152 - Connection closed by server.

13030 - StatusText properties are unavailable, and a query attempt throws an exception

对于状态代码“零”,您是在网络服务器上运行的本地网页上还是在没有网络服务器的情况下尝试进行请求?

如果您没有在Web服务器上运行脚本,XMLHttpRequest status = 0和XMLHttpRequest statusText = unknown可以帮助您。

Christophe Eblé answered 2019-07-29T10:12:58Z

6 votes

解决方法:我们最终做了什么

我们认为它与防火墙问题有关,因此我们想出了一个解决方法。 如果有人有这个相同的问题,这就是我们做的:

我们仍然像以前一样使用HTA将数据写入本地硬盘上的文本文件。

当用户单击“将数据发送回服务器”时,HTA读入数据并写出包含该数据的HTML页面作为XML数据岛(实际上使用SCRIPT LANGUAGE = XML脚本块)。

HTA在浏览器中启动指向HTML页面的链接。

HTML页面现在包含将数据发布到服务器的javascript(使用Microsoft.XMLHTTP)。

希望这可以帮助任何有类似要求的人。 在这种情况下,它是在笔记本电脑上用于贸易展的Flash游戏。 我们从未访问过笔记本电脑,只能通过电子邮件发送给客户,因为此次贸易展是在另一个国家进行的。

mike nelson answered 2019-07-29T10:14:04Z

4 votes

HTTP响应代码为0表示AJAX请求已被取消。

这可能发生在超时,XHR中止或请求上的防火墙踩踏。 超时很常见,这意味着请求无法在指定时间内执行。 XHR Abortion非常简单......您实际上可以在XMLHttpRequest对象上调用.abort()来取消AJAX调用。 (如果您不希望AJAX调用返回并尝试引用已被破坏的对象,则这是单页应用程序的良好实践。)如标记答案中所述,防火墙也可以取消请求并触发此操作 0响应。

XHR Abort:使用jQuery中止Ajax请求

var xhr = $.ajax({

type: "POST",

url: "some.php",

data: "name=John&location=Boston",

success: function(msg){

alert( "Data Saved: " + msg );

}

});

//kill the request

xhr.abort()

值得注意的是,在XHR对象上运行.abort()方法也会触发错误回调。 如果您正在进行任何类型的解析这些对象的错误处理,您会很快注意到中止的XHR和超时XHR是相同的,但是使用jQuery时,传递给错误回调的textStatus将在中止时“中止” 并发生超时“超时”。 如果您使用的是Zepto(非常类似于jQuery),则在中止时errorType将为“error”,在发生超时时将为“timeout”。

jQuery: error(jqXHR, textStatus, errorThrown);

Zepto: error(xhr, errorType, error);

Cory Danielson answered 2019-07-29T10:14:52Z

2 votes

在我的情况下,当我忘记将WWW放在我的域前时,状态变为0。 因为我所有的ajax请求都是硬编码的http:/WWW.mydomain.com并且加载的网页只是[http://mydomain.com],因此它成为一个安全问题,因为它是一个不同的域。 我最终在我的.htaccess文件中进行重定向,始终将www放在前面。

fellowworldcitizen answered 2019-07-29T10:15:17Z

2 votes

正如此页面上的此答案所详述,状态代码为0表示请求因某种原因失败,并且javascript库将失败解释为状态代码0。

要对此进行测试,您可以执行以下任一操作:

1)使用此chrome扩展,请求将您的URL从您的URL的http版本重定向到https版本,因为这将导致混合内容安全性错误,并最终生成状态代码0.此方法的优点是 您根本不需要更改应用程序,只需使用此扩展程序“重写”您的网址即可。

2)更改您的应用程序的代码,以选择性地使您的端点重定向到您的URL的http版本而不是https版本(反之亦然)。 如果执行此操作,请求将失败,状态码为0。

Brad Parks answered 2019-07-29T10:16:05Z

1 votes

在我的情况下,这是因为由于同源策略,浏览器阻止了AJAX调用。 这是最不期望的事情,因为我的所有HTML和脚本都是从提供的。他们怎么可能被认为有不同的起源?

无论如何,根本原因是一个看似无辜的标签:

我删除了标签,顺便说一句我不需要它,现在它工作正常!

Saintali answered 2019-07-29T10:16:43Z

1 votes

除了Lee的回答之外,您可以通过切换到同步请求找到有关真正原因的更多信息,因为您还会遇到异常:

function request(url) {

var request = new XMLHttpRequest();

try {

request.open('GET', url, false);

request.send(null);

} catch (e) {

console.log(url + ': ' + e);

}

}

例如 :

NetworkError:发生网络错误。

McX answered 2019-07-29T10:17:19Z

0 votes

如果其他人遇到这个问题,由于AJAX请求和正常的表单请求被发送,这给了我问题。 我用以下行解决了这个问题:

键是返回false,导致表单不发送。 您也可以从submitfunc()内部返回false,但我发现明确地将其写为更清楚。

samoz answered 2019-07-29T10:17:51Z

0 votes

应该注意的是,超过nginx的client_max_body_size指令的ajax文件上传将返回此错误代码。

r3wt answered 2019-07-29T10:18:16Z

0 votes

我找到了一个新的,没有记录的状态== 0的原因。这就是我所拥有的:

XMLHttpRequest.status === 0

XMLHttpRequest.readyState === 0

XMLHttpRequest.responseText === ''

XMLHttpRequest.state() === 'rejected'

它不是跨域,网络或由于取消请求(通过代码或用户导航)。 开发人员控制台或网络日志中没有任何内容。

我可以找到关于state()的很少的文档(Mozilla没有列出它,W3C没有列出),也没有提到“拒绝”。

原来这是我的广告拦截器(在Firefox上的uBlock Origin)。

Jonathan Amend answered 2019-07-29T10:19:02Z

ajax返回状态码为零,ajax - HTTP请求返回状态码0时的含义是什么?相关推荐

  1. 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据

    前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...

  2. HTTP请求过程 常见协议 请求类型 状态码 websocket

    HTTP(HyperText Transfer Protocol)超文本传输协议,是一种用于分布式.协作式和超媒体信息系统的应用层协议. HTTP 是一个简单的请求-响应协议,是客户端和服务端之间请求 ...

  3. Charles模拟网络请求返回状态

    一.Http请求返回状态码 1.2XX--成功请求 返回信息为2开头的状态码时,所代表的意思是: 状态码 描述 200 OK 请求成功 201 Created 请求被创建完成,同时新的资源被创建 20 ...

  4. ajax 与 err_connection_refused,如何在jquery ajax中处理net :: ERR_CONNECTION_REFUSED

    4 个答案: 答案 0 :(得分:6) 您可以使用timeout $.ajax属性触发error回调. 如果服务器在特定时间限制内没有响应,这将确保触发error回调. $.ajax({ url: & ...

  5. php使用axios发送请求,axios源码之模拟实现axios发送请求

    axios内部运作流程大致如下axios入口- ->axios构造函数- ->interceptors请求拦截器- ->dispatchRequest方法- ->transfo ...

  6. ajax请求返回状态码

    1开头的http状态码 表示临时响应并需要请求者继续执行操作的状态代码. 100   (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分.   101   ...

  7. Ajax库-认识服务器,URL地址,axios基本用法,响应状态码,业务状态码,接口测试工具

    AjaxDay01 学习目标 1.理解客户端与服务器通信的过程 2.掌握 axios 的使用 3.了解接口文档的概念 服务器相关基础概念 概念:服务器是提供服务的设备(本质上就是一台电脑主机). 作用 ...

  8. ajax请求提示html状态码302,快速解决ajax请求出错状态码为0的问题

    今天在使用 ajax 向后台请求数据时出现错误,提示状态码为 0 ,后台采用的是 spring mvc 架构. 状态码为0是什么意思呢?查找了下,原来它意味着 (未初始化)即没有调用到send()方法 ...

  9. jQuery源码分析之$.ajax方法

    请阅读我其它的关于inspectPrefiltersOrTransport以及ajaxTransport等相关博文,请了解readyState状态码 针对获取到location.href的兼容代码: ...

最新文章

  1. windows给应用断网
  2. 访问数据段时的特权级检查,修改SS时的特权级检查——《x86汇编语言:从实模式到保护模式》读书笔记30
  3. Undefined control sequence. 问题
  4. python断言assertequal_python-尝试断言AlmostEqual / assertEqual时,不受支持的操作数类型...
  5. oracle存储过程写法(一)
  6. 关于Android错误 View requires API level 14 (current...
  7. iOS不同版本适配问题
  8. java程序员目标_Java程序员的目标,你都达到了多少条?
  9. 计算机基础98均9,第三章 计算机基础 Windows98 (第二讲).ppt
  10. 关于CityEngine导入shp数据
  11. html游走字幕代码大全,html 滚动字幕代码
  12. Android测试驱动开发实践2
  13. php源雄武,8个新鲜的PHP常用代码
  14. Unity Shader - Standard Shader 标准着色器
  15. 程序员学数学读哪本书?
  16. opencv 双目标定操作完整版
  17. wps工具显示灰色全部用不了,提示登录
  18. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化
  19. 码绘:使用p5.js进行简单的作画
  20. 7種解決方案修復請將磁片插入磁碟機

热门文章

  1. SECS/GEM:PLC与MES间解决方案
  2. LiveVideoStackCon 2018 音视频技术大会七折倒计时3天
  3. 为了解决计算机主机,一种计算机主机的制作方法
  4. 推动石化产业绿色循环发展 茂名天源石化碳三碳四项目
  5. pygame获取系统中的字体
  6. oneinStack配置无域名网站
  7. Java并发编程:进程、线程、并行与并发
  8. 卧兔操刀,头部游戏公司莉莉丝出海,红人营销仅10天数据翻一倍
  9. 《学活Linux》第二讲——内核模块和驱动模型
  10. 计算机二进制转化教案及ppt,二进制和十进制之间的转换.ppt