跨域请求

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
    }
}

我做错了什么?正确的方法是什么?
4个回答

2

我认为脚本文件所在的域可以向该来源发出请求?

不是的。源始终是页面,而不是脚本。


1
那么像Google Analytics或其他JavaScript API库等类似的东西是如何发起调用的呢? - Micah
2
他们要么发出只写请求,要么使用JSONP。 - Quentin

2

我做错了什么?

你的脚本违反了跨域限制,因为它是从一个域中提供的,但请求另一个域中的脚本。

正确的方法是什么?

有两种可能:

  1. 将运行脚本和被调用脚本都放在同一个域下。

  2. 使用 dataType = "jsonp" 来绕过限制。jQuery 将执行一些魔法(将调用替换为内联脚本引用,格式为 <script src="mydomain.com/endpoint" />),使其可以工作。


1
脚本的来源始终是mydomain.com!您可以使用Ajax代理(通过后端)或者最好使用JSONP(更可能是两者都用,取决于您的需求)。

0
当您加载JavaScript时,就好像代码在someotherdomain.com上一样,从该域到mydomain.com会出现跨域问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接