2011-06-19 46 views
0

我喜歡我的JSON數據轉換成JS對象或將其分配給一個變量..解析JSON AJAX變種

$.ajaxSetup({ 
type: "POST", 
url: "_class/queries.php", 
dataType:"json" 
}); 

var obj;  

$.ajax({ 
    data: querystring, 
    success: function(data){ 

    console.log(data); 

    alert(data[0].vname); 

    //obj = JSON.parse(JSON.stringify(data)); 

    obj = data; 

    console.log(obj[0].vname);//<-- prints the expected property 
    } 

}); 

console.log("return "+obj);//<-- undefined? 
return obj; 

} 

警報打印出正確的屬性值,但不知何故EVAL-功能產生分析錯誤?我試過jQuery.parseJSON,但不會工作嗎?

+1

請向我們展示JSON數據。另外,ajax是異步的,所以在'return obj'上,它可能還沒有被設置。 –

+0

你的json有效嗎? $ .parseJSON會工作,如果是。 Id由於性能問題避免評估。 – locrizak

+0

@locrizak它應該是有效的? [{ 「ID」: 「21」, 「VNAME」: 「悲傷」, 「名稱」: 「霍伯特」, 「住址」: 「sdfdsf」, 「PLZ」: 「34534」, 「ORT」: 「dfgdsfg」, 「email」:「sdfgsdfg」}] – Don

回答

0

json變量包含已解析的值 - 服務器返回的數據。 爲什麼你需要eval呢?

obj = data; 

就夠了。

+0

是的,它的工作原理! – Don

0

設置的$.ajax() type屬性來json

$.ajax({ 
    data: querystring, 
    dataType: "jsonp", 
    success: function(json) { 
     console.log(json); 
     alert(json[0].vname); 
     obj = eval("(" + json + ")"); 
    } 
}); 

從手冊:

「JSON」:評估響應作爲JSON 並返回一個JavaScript對象。在 jQuery 1.4中,JSON數據以嚴格的方式在 中解析;任何格式不正確的JSON是 被拒絕並引發解析錯誤。 (有關 正確的JSON格式的詳細信息,請參閱json.org。)

eval()shouldn't be used如果可能的話 - 你的情況,除非你的JSON數據包含實際的Javascript代碼來執行你不需要eval()它。

此外,AJAX調用是異步的 - 這意味着AJAX請求被製成通常程序執行的亂序。在您的代碼中,這意味着在return obj;obj變量與AJAX調用返回服務器中的數據並將eval()調用返回給obj後的值不同。解決方案是event-driven programming - 在你的情況下,讓成功函數調用你想要發生的下一個「事件」,或者使用AJAX函數來填充一個變量(在全局範圍內,最好是namespaced)另一個事件民意調查(使用定時事件,如setInterval())。

+0

確定她的所有代碼: – Don

+0

thx,也許這就解釋了爲什麼在成功函數中的運算效果很好,甚至obj = data;作品!但是,我怎樣才能返回obj? – Don

+0

您必須使用基於事件的編程,請參閱上面的最後一段。 – Andy