摘要:主要介紹:使用eval函數解析JSON數據;$.getJSON()方法獲得服務器返回的JSON數據
JavaScript eval() 函數
eval(string) 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。
參數string:要計算的字符串,其中含有要計算的 JavaScript 表達式或要執行的語句。
該方法只接受原始字符串作為參數,如果 string 參數不是原始字符串,那么該方法將不作任何改變地返回。因此請不要為 eval() 函數傳遞 String 對象來作為參數。
使用eval函數解析json
假設服務器返回的JSON字符串:
- var data="
- {
- root:
- [
- {name:'1',value:'0'},
- {name:'6101',value:'北京市'},
- {name:'6102',value:'天津市'},
- {name:'6103',value:'上海市'},
- {name:'6104',value:'重慶市'},
- {name:'6105',value:'渭南市'},
- {name:'6106',value:'延安市'},
- {name:'6107',value:'漢中市'},
- {name:'6108',value:'榆林市'},
- {name:'6109',value:'安康市'},
- {name:'6110',value:'商洛市'}
- ]
- }";
如果jquery異步請求沒做類型說明,或者以字符串方式接受,那么需要做一次對象化處理,即將該JSON字符串放於eval()中執行一次
- var dataObj=eval("("+data+")");//轉換為json對象
可能你已經注意到啦,為什么eval參數里面要寫成"("+data+")"這種加圓括號的形式?
原因:
前面我們提到了,eval()函數可以執行參數里的表達式!
由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。
加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。
舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:
- alert(eval("{}"); // return undefined
- alert(eval("({})");// return object[Object]
這種寫法,我們經常在js中可以看到:
- (function(){
- })(jQuery); //做閉包操作
閉包就是將函數內部和函數外部連接起來的一座橋梁!
利用$.getJSON()方法
提示:雖然 eval() 的功能非常強大,但在實際使用中用到它的情況並不多。
對於服務器返回的JSON字符串,如果jquery異步請求將type設為“json”,或者利用$.getJSON()方法獲得服務器返回,那么就不需要eval()方法了,因為這時候得到的結果已經是json對象了,只需直接調用該對象即可,這里以$.getJSON方法為例說明json數據的處理方法:
- $.getJSON("http://www.exp99.com/",{param:"USER_GUID"},function(data){
- //此處返回的data已經是json對象
- $.each(data.root,function(idx,item){
- if(idx==0){
- return true;//同continue,返回false同break
- }
- console.log("name:"+item.name+",value:"+item.value);
- });
- });