如何在子域之间进行jQuery ajax调用?

3

我有一个像下面这样的域名。

我在其中有两个子域名,如下所示。

http://foo.jayshit.info

http://bar.jayshit.info

我想从foo.jayshit.info发起jQuery ajax调用到bar.jayshit.info以获取一些HTML或将一些数据更新回服务器。

我知道由于同源策略(Same Origin Policy),这并不容易。而且我也不想使用JSONP。因为我想让我的ajax调用具有async: false,如下所示。

$.ajax({
    type: "POST",
    cache: false,
    url: tURL,
    data: tData,
    async: false
});

请告诉我是否有人找到了解决这个问题的方法。

提前感谢。

祝好。

5个回答

5
自己控制另一个子域名后,您可以从 bar.jayshit.info 发送此标题:this header
Access-Control-Allow-Origin: http://foo.jayshit.info
Access-Control-Allow-Methods: GET, POST

现代浏览器会遵循这些头信息并允许您发出请求。但是,对于IE8,您需要使用不被jQuery支持的XDomainRequest。请参考XDomainRequest

谢谢@Esailija将头信息添加到服务器中可以解决问题,但正如您所提到的那样,IE除外。仍在寻找IE的解决方案:( - Jayshit Ladani
在IIS服务器中添加头信息后,AJAX GET请求仅在Chrome和Firefox上工作。尽管如此,在IE和Safari上AJAX GET请求并没有工作。但是POST在所有浏览器中都无法工作。 - Jayshit Ladani
@JayshitLadani 你有在IE中使用 XDomainRequest 吗?请记得要手动完成,因为jQuery不知道它。 - Esailija

0

使用

dataType: "jsonp"

...

$.ajax({
    type: "POST",
    dataType: "jsonp",
    cache: false,
    url: tURL,
    data: tData,
    async: false
});

更多信息:

http://api.jquery.com/jQuery.ajax/


我知道使用JSONP作为dataType可以实现,但这对我来说不是一个选择。 - Jayshit Ladani

0

我建议您将以下内容添加到您的代码中:

jQuery.support.cors = true;

请参考此链接以获取更多信息


0

0

答案是CORS和JSONP。IE目前不支持CORS,您必须等待IE10才能获得它。 JSONP只允许您进行跨域GET而不是POST、PUT和DELETE。 CORS确实解决了这些问题,并且所有其他浏览器都支持它。

您可以通过在您的网站中构建代理来解决此问题,该代理将为您从服务器发出调用。这将使您绕过浏览器中的跨域问题。如果您想知道,这些措施是出于安全考虑而采取的。


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