[英]Why does this jQuery.ajax not raise an error?
今天早上我们遇到了一个有趣的问题——问题本身的细节在这里并不重要,我已经修复了它,但我确实遇到了一些奇怪的事情,对我来说,关于 jQuery。
The site I am building internally runs on https, only, so Apache is set to redirect any inbound http request to its https equivalent. 此重定向工作正常。 但是,我的软件中有一个错误,我试图发送以下 ajax 请求:
jQuery.ajax({ type: "PUT",
url: "http://somewhere.com/cmdt/todo_lists/8457/toggle",
data: { deployment_id: 827},
dataType: "script"});
我知道这会失败 - 我可以接受 jQuery 不想遵循重定向。 但实际行为更奇怪:我根本没有看到 xhr 请求 go 出来,也没有 javascript 错误。 如果我将 url 更改为 https 或相对路径,它就会默默地失败。 它工作正常,没问题吗? 我的问题是? 为什么之前没有尝试发送请求? 为什么它没有引发错误?
您没有失败的原因是因为它是一个跨站点请求,因此不是使用XMLHttpRequest
,它实际上是生成一个 HTML <script>
标签并将其放入 DOM,并使用该机制加载文件。
这工作得相当好(考虑到这是对错误的浏览器“安全”概念的彻底破解),但遗憾的是,jQuery 无法在此时捕获错误。 如果您打开了开发人员模式,您可能会收到浏览器错误,但仅此而已。
如果您从 url 即https
运行它并尝试打开等效的http
页面,由于它们使用的协议不同,您会遇到跨域问题。 看看同源政策。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.