2012-12-23 80 views
-1

我想從json webservice中檢索數據。xmlHttp.responseText不從json webservice返回數據

if (xmlHttp.status == 200 || xmlHttp.status == 0) 
     { 
      var result = xmlHttp.responseText; 
      json = eval("(" + result + ")"); 
     } 

我「米卻一無所獲的VAR的結果。當我更換包含JSON對象的文本文件的Web服務,那麼我可以檢索JSON對象的responseText。請首先幫助

+1

你檢查什麼的'xmlHttp.status'的價值? – Stanley

+0

該代碼無效,請發佈一個工作示例。 –

+0

xmlHttp.status的值爲0 – ishk

回答

1

第一件事...... 永遠,永遠,永遠使用eval *eval =邪惡。

如何使用GET與AJAX ...

try { 
    http = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e1) { 
    try { 
     http = new ActiveXObject("Microsoft.XMLHTTP"); 
    } catch (e2) { 
     this.xmlhttp = null; 
    } 
} 
var url = "/uri/of/web-service?val1=Laura&val2=Linney" + Math.random(); 
var params = "val1=Laura&val2=Linney"; 
http.open("GET", url, true); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     // we have a response and this is where we do something with it 
     json = JSON.parse(http.responseText); 
    } 
} 
http.send(); 

如何使用POST與AJAX ...

try { 
    http = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e1) { 
    try { 
     http = new ActiveXObject("Microsoft.XMLHTTP"); 
    } catch (e2) { 
     this.xmlhttp = null; 
    } 
} 
var url = "/uri/of/web-service"; 
var params = "val1=Laura&val2=Linney"; 
http.open("POST", url, true); 

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Content-length", params.length); 
http.setRequestHeader("Connection", "close"); 

http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
     // we have a response and this is where we do something with it 
     json = JSON.parse(http.responseText); 
    } 
} 
http.send(params); 
+0

即時嘗試打開與GET的連接,所以我可以知道如果這是一個GET請求代碼更改? – ishk

+0

好的,狗屎,我必須承認我一直在使用eval()通過JSON.parse。你明確地說這是不好的,所以我只假設你確切地知道爲什麼..你介意教我關於這個功能及其風險嗎?我假設它會是因爲eval()將執行任何javascript功能,而解析,只會試圖解析它到一個對象 – Atticus

+0

@Atticus:如果你擁有這項服務,'eval'不是太邪惡。但'JSON.parse'幾乎總是更好。但請注意,它在某些較舊的瀏覽器上不可用,例如IE <8。因此,您必須在使用之前將其刷新或進行回退和檢查。 –