2011-07-12 59 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" />格式的内嵌脚本引用调用来完成这项工作。