2011-06-09 28 views
1

今天上午我们有一个有趣的问题 - 这个问题本身是不相关这里的细节,我已经定了,但我却碰到一些奇怪的事情,对我来说,关于jQuery的。为什么这个jQuery.ajax不会引发错误?

我国内建设的网站上仅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错误!它只是失败,默默地。如果我将url更改为https或相对路径,它可以正常工作,没有问题。我的问题是,为什么不尝试发送请求?为什么它没有提出错误?

+0

这可能是单一来源策略踢,默默失败。你应该在Chrome等浏览器虽然 – 2011-06-09 13:43:35

+1

这不是jQuery的不_wanting_遵循重定向得到一个错误,这是在工作跨域策略:你**不能**请求(阿贾克斯)一个'https'从资源'http'页面,反之亦然。 – 2011-06-09 13:45:33

回答

3

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

这工作得相当好(考虑到它是围绕执迷不悟浏览器一个完整的黑客“安全”的概念),但在这一点上有没有办法让jQuery来捕获错误,可悲。如果您开启了开发人员模式,您可能会收到浏览器错误,但就是这样。

+0

+1很好的答案。 – 2011-06-09 13:48:24

+0

如果检测到它是跨域的,您确定它会使用脚本标记吗?这看起来很奇怪,我认为它会尝试发送它并让浏览器拒绝它。我相信jsonp是如何描述的,但我认为它不会自动为跨域非jsonp请求做同样的事情。 – 2011-06-09 13:49:22

+0

@kingjiv:我非常确定'script',jQuery为开发人员提供了痛苦并检测。对于'json' /'jsonp'你必须明确。 – 2011-06-09 17:26:31

0

如果您运行的是从URL这是https并试图打开相当于http页面您遇到跨域问题,由于不同协议他们使用。看看same origin policy

相关问题