JQuery、XmlHttpRequest 和状态代码 0

标签 jquery json xmlhttprequest jsonp status

我最近一直在使用 JSONP 和 ASP.NET MVC 编写一些跨域 javascript。

特定的 Controller 操作将仅响应 POST 请求,这是设计使然。

在 IE8 中,我可以(通过 Fiddler2)看到响应是正确的,并返回 HTTP 200 响应以及 JSONP javascript。

在 Firefox、Safari 和 Chrome 中,仍然会返回响应,并带有适当的 HTTP 200 代码和 JSONP 内容,唯一的区别是 JQuery 使用的 XmlHttpRequest 对象将状态代码设置为 0,并且responseText清空。

最初,我认为这是由于 COR HTTP 预检(Http 访问控制)造成的,自定义 header 或除 text/plain 之外的内容类型会导致额外的 HTTP 请求(带有 OPTIONS)动词发送到服务器。我可以在 Fiddler2 中看到 OPTIONS 请求正在通过 HTTP 404 进行响应。

Web 服务器是 IIS7(但生产 Web 服务器将是 IIS6 机器)。在 IIS7 中,我可以看到处理程序中列出的标准 OPTIONSVerbHandler,但我不相信这实际上在做任何事情(事实上,我什至在任何地方都找不到有关 OPTIONSVerbHandler 的任何文档)。

为了解决这个问题,我修改了 JQuery 库以不设置自定义 header ,并将内容类型更改为 text/plain 而不是 application/json,Firefox 最终开始绕过 OPTIONS 请求,而只是简单的 POST。

问题仍然在于空响应(根据 XmlHttpRequest 对象),即使 Fiddler2 显示成功的 HTTP 200 响应,并且正在返回内容。

有什么帮助吗?

最佳答案

事实证明,您不能使用 POST 与 JQuery 进行跨域调用(这是有道理的,因为它呈现脚本标记来进行调用)。切换到 GET 解决了问题,现在一切都正确返回。

必须浏览 JQuery 源代码才能弄清楚这一点,但感谢您的回复。

马特

关于JQuery、XmlHttpRequest 和状态代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171490/

相关文章:

asp.net - 无法从 jQuery 使用 ASP.NET Web 服务

javascript - 如何提取 json 数据并通过 js 为每个拆分元素追加?

javascript - 为什么这个 JSON 在 IE 中不起作用

node.js - Socket.io access-control-allow=来自远程站点的来源错误

javascript - Jquery 多选 - 切换隐藏 optgroup 问题

php - 如何让ajax javascript在按下回车键时工作

javascript - JSON 或 Jquery 错误 : Uncaught TypeError: Cannot read property 'error' of null

c# - 使用 newton json 在 c# 中从反序列化的 json 转换错误

javascript - 如果我不知道响应类型,我可以执行 XMLHttpRequest 吗?

excel - 如何从 Excel 宏 (vba) 使用 API 询问 ChatGPT?