我有一个从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 :(得分:2)
我认为从脚本文件加载的任何域都能够将请求发回到该源?
没有。原点是总是 页面而不是脚本。
答案 1 :(得分:2)
我做错了什么?
您的脚本违反了跨域限制,方法是从一个域提供服务,但在另一个域上请求脚本。
什么是正确的方法?
有两种可能性:
将正在运行的脚本和被调用的脚本放在同一个域下。
使用dataType = "jsonp"
来绕过限制。 jQuery将执行一些魔术(用<script src="mydomain.com/endpoint" />
格式的内联脚本引用替换调用以使其工作。
答案 2 :(得分:1)
脚本的来源始终为mydomain.com
!你可以使用Ajax代理(通过你的后端),或者最终 JSONP 是你的方式(更可能两者都取决于你的需要)。
答案 3 :(得分:0)
当您加载javascript时,就好像代码在someotherdomain.com
上一样,您将遇到从该域到mydomain.com
的跨域问题。