2011-06-09 29 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

相關問題