3

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

我有两个子域,如下所示。

http://foo.jayshit.info

http://bar.jayshit.info

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

我知道由于相同的原产地政策,这并不容易。而且我也不想使用JSONP。因为我希望我的 ajax 调用具有async: false如下所示。

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

请让我知道是否有人遇到了一些解决方法。

提前致谢。

问候,

4

5 回答 5

5

由于您控制着另一个子域,因此您可以从 bar.jayshit.info发送此标头:

Access-Control-Allow-Origin: http://foo.jayshit.info
Access-Control-Allow-Methods: GET, POST

现代浏览器尊重这些标头并允许您发出请求。对于 IE8,您需要使用XDomainRequestjQuery 不支持的。

于 2012-07-19T11:44:30.717 回答
0

http://foo.jayshit.infohttp://bar.jayshit.info是 2 个不同的域,所以你需要跨域请求,第一个来自 google 的链接:http: //james.padolsey.com/javascript/cross-域请求与 jquery/

于 2012-07-19T11:47:40.123 回答
0

采用

dataType: "jsonp"

...

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

更多信息:

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

于 2012-07-19T11:48:11.990 回答
0

我建议您在代码中添加以下内容:

jQuery.support.cors = true;

有关更多信息,请参阅此链接

于 2012-07-19T11:48:41.443 回答
0

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

您可以解决此问题的另一种方法是在您的网站中构建一个代理,该代理将为您从服务器进行调用。这将帮助您解决浏览器中的跨域问题。这些是作为安全预防措施的,以防您想知道。

于 2012-07-19T13:00:44.323 回答