2011-07-12 64 views
4

我有一個從mydomain.com加載的腳本文件,它向該域發出ajax請求。該腳本雖然被加載到一些其他域上,並初始化它,然後告訴它何時發出請求。我遇到了問題,因爲瀏覽器認爲這是一個跨域請求。我認爲無論加載腳本文件的域名是否能夠將請求發回原始地址?下面是一些代碼爲例:跨域請求

網頁someotherdomain.com

<html> 
    <head> 
     <script type="text/javascript" src="http://mydomain.com/test.js"></script> 
     <title>Cross-Domain Ajax Test</title> 
    </head> 
    <body> 
     <h1>Test</h1> 
     <p id="ajax-response"></p> 
     <script type="text/javascript"> 
      Test.testAjax(); 
     </script> 
    </body> 
</html> 

腳本從mydomain.com

Test = { 
    testAjax: function() { 
     //make ajax request to http://mydomain.com/myendpoint 
    } 
} 

裝什麼我做錯了什麼?什麼是正確的方法?

回答

0

當您加載JavaScript時,就好像代碼位於someotherdomain.com一樣,您將會從該域出發跨域問題到mydomain.com

2

我以爲無論從哪個域加載腳本文件都能夠將請求發回原來的位置?

號的由來是總是頁面不是腳本。

+1

所以如何做事情像谷歌分析或其他JavaScript API庫使自己的電話? – Micah

+2

他們要麼做只寫請求,或者他們使用JSONP。 – Quentin

1

腳本的由來始終是mydomain.com!你可以使用Ajax代理(通過你的後端)或最終JSONP是你走的路(更可能兩者取決於你的需求)。

2

我在做什麼錯?

您的腳本通過從一個域提供服務,但在另一個域請求腳本來違反跨域限制。

什麼是正確的方法?

有兩種possibilites:

  1. 將同時運行腳本,同一個域下的調用的腳本。

  2. 使用dataType = "jsonp"繞過限制。 jQuery將執行一些魔術(替換用的<script src="mydomain.com/endpoint" />格式的內嵌腳本引用調用來完成這項工作。