2010-06-28 67 views
9

我有一個服務器位於example.com運行apache,爲我的靜態html文件提供服務。Ajax調用子域

我還有一個位於api.example.com的json服務,它使用cherrypy運行python。

用戶請求example.com並獲取索引html頁面。在那個頁面上,我使用jQuery向json服務發出ajax請求。 document.domain返回example.com

 $.ajax({ 
     type: 'GET', 
     url: 'http://api.example.com/resource/', 
     dataType: 'json', 
     success: successCallback, 
     error: errorHandler 
    }); 

然而,我無法看到響應主體在螢火Ajax請求。這導致我相信瀏覽器(FF)不支持這一點。

什麼是實現這一目標的最佳方法?如果可能,我不希望在Apache的後端使用任何代理。

+0

不同子域=不同域 – 2010-06-28 14:42:26

+0

是的。但example.com是api.example.com的父域,所以這些url之間的關係應該是父 - 子不是child -child。 – Baversjo 2010-06-28 14:46:50

回答

4

您還可以使用JSONP加入callback =?到網址的結尾。 jQuery已經知道如何處理這些類型的請求,但它確實需要一些服務器端更改來處理回調參數。

0

據我所知,你不能做AJAX跨域。

Why is cross-domain Ajax a security concern?

雖然我想你可以做一個IFRAME的解決方法

Cross Sub Domain Javascript

+2

但它不是跨域! – Baversjo 2010-06-28 14:26:27

+0

我想你可以做一個IFRAME解決方法 http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/ – SAGExSDX 2010-06-28 14:27:34

+1

根據相同的來源策略,它是一個不同的域名:http://en.wikipedia.org/wiki/Same_origin_policy – wsanville 2010-06-28 14:27:57

0

AJAX請求僅支持在同一個域。但是,您可以使用您喜歡的腳本語言編寫一個http代理,並調用該代理。你可以在用php編寫的AJAX代理上看看這個小小的tutorial

+0

使用代理並不是高規模應用的好解決方案。 – 2013-02-19 07:16:08

-1

使用document.domain使域成爲頂級域而不是子域。

document.domain="example.com" 

這是MDN上的described in detail

+0

它已被設置爲頂級域名,如上所述 – Baversjo 2010-06-28 14:39:39

+3

document.domain僅適用於iframe,而不適用於ajax請求 – Nathan 2013-09-17 10:41:43

0

試着改變你的域名加入子域,像這樣

<script type="text/javascript">  
    document.domain = 'example.com'; 
</script> 

如果還是不行,在您的域名頁面過更改document.domain的。