为什么这个jQuery.ajax不会引发错误?

时间:2011-06-09 13:40:49

标签: javascript ajax jquery

今天早上我们遇到了一个有趣的问题 - 这个问题的细节本身并不相关,我已经解决了,但我确实遇到了一些关于jQuery的奇怪事情。

我在内部构建的站点仅在https上运行,因此Apache设置为将任何入站http请求重定向到其https等效项。这种重定向工作正常。但是,我的软件中有一个错误,我试图发送以下ajax请求:

jQuery.ajax({  type:       "PUT",
           url:        "http://somewhere.com/cmdt/todo_lists/8457/toggle",
           data:       { deployment_id: 827},
           dataType:   "script"});

我知道这会失败 - 我很好,jQuery不想遵循重定向。但实际行为甚至更奇怪:我从来没有看到过xhr请求!并且没有javascript错误!它只是失败,默默地。如果我将网址更改为https或相对路径,它可以正常工作,没问题。我的问题是,为什么不尝试发送请求呢?为什么不引起错误?

2 个答案:

答案 0 :(得分:3)

您没有收到失败的原因是因为它是一个跨站点请求,因此它实际上生成了一个HTML XMLHttpRequest标记并将其放入DOM中,而不是使用<script>。并使用该机制加载文件。

这种方法运行得相当好(考虑到这是一个完全破解错误的浏览器“安全”概念),但遗憾的是,jQuery没有办法在这一点上捕获错误。如果您打开了开发者模式,则可能会出现浏览器错误,但就是这样。

答案 1 :(得分:0)

如果您从https的网址运行该网页,并尝试打开等效的http网页,则由于他们使用不同的协议而遇到跨域问题。看看same origin policy