我将AJAX调用到与原点相同的域。例如,原点是http://foo.com/folder/index.php
,我的AJAX调用中的域将转到http://foo.com/folder/finder.php
。所以我的AJAX调用基本上看起来像这样:
var url = "http://foo.com/folder/finder.php?";
request = createRequest();
request.open("GET", url, true);
request.onreadystatechange = confirmCall;
request.send(null);
在这种情况下,finder.php
会给我一个目录列表。 request
是全局变量。 AJAX调用本身就很完美。
虽然我的计算机上的不同浏览器的CORS问题没有问题,但是其他人得到了典型的CORS Access-Control-Allow-Origin
禁止错误。从这个意义上讲,奇怪的是他们并不总是得到这个错误。
请注意:我将大部分相关链接发送到CORS,例如MDM。它们都是指跨域调用,因为这是问题所在。
但是我没有打电话来跨越域名。还是我监督一些事情?请问,任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
由于这似乎解决了这个问题,我会写一个答案来覆盖它,这样你就可以完成这个问题了。
如果您的服务器同时接受http://www.foo.com/folder/index.php
和http://foo.com/folder/index.php
(这并不罕见),那么您必须非常小心如何请求Ajax调用,因为如果有人将http://www.foo.com/folder/index.php
键入浏览器栏,这是用于网页的URL,但随后您的Ajax请求转到http://foo.com/folder/finder.php
,然后浏览器会抱怨http://foo.com
与http://www.foo.com
的来源不同,并且因跨域安全原因拒绝进行Ajax调用。
有几种方法可以解决这个问题。首先,您可以通过自动重定向http://foo.com
到http://www.foo.com
来修复服务器端,以便所有Ajax请求都来自http://www.foo.com
,然后在您的Ajax URL中使用该域。
或者,在客户端,您可以将所有URL设置为域相关,以便它们自动使用网页使用的任何域。因此,您可以使用http://foo.com/folder/finder.php?
,而不是以/folder/finder.php?
请求您的Ajax网址。浏览器将自动使用加载网页的相同域,因此没有跨域问题。