我最近一直在使用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访问控制)引起的,即自定义标头或非文本/纯文本的内容类型将导致一个附加的HTTP请求(带有OPTIONS)动词发送到服务器。我可以在Fiddler2中看到,正在使用HTTP 404响应OPTIONS请求。
Web服务器是IIS7(但生产Web服务器将是IIS6框)。在IIS7中,我可以在处理程序中看到标准的OPTIONSVerbHandler,但我不相信这实际上在做任何事情(实际上,我什至在任何地方都找不到关于OPTIONSVerbHandler的任何文档)。
为了解决这个问题,我修改了JQuery库以不设置自定义标头,并将内容类型更改为text / plain而不是application / json,然后Firefox最后开始绕过OPTIONS请求,而只是普通的POST。
问题仍然存在于空响应中(根据XmlHttpRequest对象),即使Fiddler2显示成功的HTTP 200响应(包含内容)也已返回。
有什么帮助吗?
最佳答案
事实证明,您无法通过POST将跨域调用与JQuery一起使用(这很有意义,因为它呈现了一个脚本标记来进行调用)。切换到GET可以解决此问题,现在一切正常。
不得不遍历JQuery源代码来解决这个问题,但是感谢您的答复。
马特