2010-01-13 187 views
14

問:跨域JSON請求?

我試圖使用JSON翻過域,但我覺得是JSON解析器,這我不需要......
我讀過,這是可以做到跨域使用XMLHttpRequest的使用JSON, 請求,但到目前爲止,我看到的是實現...
- 這意味着你不能使用跨域請求,至少不是IE 8外...
我已經一直在http://www.json.org/,但我發現的是解析器或無用的。

我已經與谷歌找到的最好的,到目前爲止是
http://devpro.it/JSON/files/JSONRequest-js.html
但這是一個相當混亂,不能正常工作跨域和域內既不 - 或者更確切地說,不是在所有...

var the_object = {}; 
var http_request = new XMLHttpRequest(); 
http_request.open("GET", url, true); 
http_request.onreadystatechange = function() { 
    if (http_request.readyState == 4 && http_request.status == 200) { 
      the_object = JSON.parse(http_request.responseText); 
     } 
}; 
http_request.send(null); 
+0

如果您使用「http_request.responseXML」,那麼如果您的服務器響應不是XML,它將變爲空。 – dinesh707 2013-01-17 08:58:09

回答

14

你能做什麼跨域是注入一個腳本包括:

var s = document.createElement('script'); 
s.src = 'http://someotherdomain/getMeMyJs.aspx?parameter=value'; 
s.onload = someOptionalCallback; 
s.type = 'text/javascript'; 

if(document.getElementsByTagName('head').length > 0) 
    document.getElementsByTagName('head')[0].appendChild(s); 

現在,通過請求返回的代碼會EXECUT馬上編輯。如果你想爲與你的代碼交互,可以確保它正在與包裹在一個函數調用的所有數據恢復:

jsonCallback({ object: json, whatever: value }); 

你可以用它來構建的API,在那裏你傳遞的名稱回調函數作爲請求查詢字符串參數。 Here's an example of such an API

+5

這通常被稱爲JSONP(帶填充的JSON)。見http://en.wikipedia.org/wiki/JSONP#JSONP – 2010-01-13 10:13:29

+0

你應該試試這個: s.src ='http://google.com/complete/search?q='+ document.getElementById('txtSynonym ').value +'&callback = GoogleSuggest'; – 2010-01-13 11:31:43

13

JSON只是一種序列化方法。在序列化的方法和瀏覽器是否會試圖阻止你跨域訪問數據的問題之間沒有任何關係。 (這解釋了爲什麼你只能找到解析器 - JSON除了編碼和解碼外沒有任何東西)。

XMLHTTPRequest簡稱爲XML HTTPRequest。它與XML沒有任何關係。它可以用來發送文本數據,用JSON編碼的數據或其他任何序列化方法。

有幾種訪問數據跨域的方法。一個在David Hedlund的回答中描述。其他答案也可以在類似問題的答案中找到(請參閱herehere)。