2011-09-10 38 views
0

我有一個API設置在另一個域,域B(api.domainb.com),並且想從域A調用它(www.domaina.com)。但是,當我通過jquery ajax從域A到域B的調用時,jquery最終嘗試調用www.domaina.com/api.domainb.com,這顯然會返回錯誤。下面是相關的JavaScript代碼跨域jquery 1.6.2 ajax調用正嘗試從相同的域調用

$.ajax(
     url: 'http://api.domainb.com', 
     type: 'GET', 
     dataType: 'jsonp', 
     data: {hello: 'world'}, 
     crossDomain: true, 
     success: function(data){ 
     alert(JSON.stringify(data)) 
     }, 
     error: function(error){ 
     alert(JSON.stringify(error)) 
     }); 

最終,在域A與域B的代碼將在同一領域,但現在,我需要做一個跨域調用。有關如何使這項工作的任何建議?

+0

在這個問題的原始版本,我有網址爲url:'api.domainb.com'。有人建議我應該將其更改爲「http://api.domainb.com」。問題原始版本中的代碼已更新以反映此問題。我嘗試添加'http://',但沒有改變 - 我遇到了同樣的問題。 – user938301

回答

2

您無法進行跨域調用;瀏覽器根本不允許它。但是,您看到您描述的行爲的原因是您的網址缺少「http://」前綴。

你可以用fairly new HTML5 APIs來做一些事情來排序 - 獲得許可來進行跨域調用。

編輯 @丹指出正確的,雖然XMLHttpRequest的(人們通常所說的「AJAX」)不會做跨域的東西(CORS除外),有可能利用該<script>標籤可以引用其他領域的事實爲了組裝一個服務。但是,服務器端代碼必須不同。 (通常稱爲「JSONP」。)

+0

我不是專家,但只要服務器端準備合作,IIRC就可以使用JSONP來解決限制。在幕後,它使用'script'標籤代替XHR。 – Dan

+0

是的,這是真的,但當然這不是真正的XHR :-)然而,我會澄清答案。謝謝! – Pointy

+0

正確,但我認爲jQuery背後的重點在於它的'ajax'調用中的差異在於XHR和JSONP真的實現了相同的功能。爭論的定義當然是棘手的,但我從來沒有把「AJAX」看作是XHR。 – Dan

2

您只是錯過了協議,以便Ajax調用知道它是不同的域而不是相對的URL。嘗試使用​​3210。