獲取動態返回的變量值或對象屬性

 1.對於服務器返回的JSON字符串,如果jQuery異步請求沒做類型說明,或者以字符串方式接受,則需要做一次對象化處理,將該字符串放於eval()中執行一次。這種方式也適合以普通javascipt方式獲取json對象。

var u = eval('('+user+')');
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

 2.對於服務器返回的JSON字符串,如果jquery異步請求將type(一般爲這個配置屬性)設爲“json”,或者利用$.getJSON()方法獲得服務器返回,就不需要eval()方法了,這時候得到的結果已經是json對象了,只需直接調用該對象即可。

$.getJSON("http://www.qk12333.com/",{param:"jcuckoo"},function(data){ 
    //此處返回的data已經是json對象 

    //以下其他操作同第一種情況 
    $.each(data.root,function(idx,item){ 
        if(idx==0){ 
            return true;//同countinue,返回false同break 
        } 
        alert("name:"+item.name+",value:"+item.value); 
    }); 

});

這裏特別需要注意的是方式1中的eval()方法是動態執行其中字符串(可能是js腳本)的,這樣很容易會造成系統的安全問題。所以可以採用一些規避了eval()的第三方客戶端腳本庫,比如JSON in JavaScript就提供了一個不超過3k的腳本庫。

第二種解析方式就是使用Function對象來完成,它的典型應用就是在JQUERY中的AJAX方法下的success等對於返回數據data的解析

var json='{"name":"userName","age":28}';
data =(new Function("","return "+json))();

此時的data就是一個會解析成一個 json對象了

var code1='"a" + 2'; //表達式 
var code2='{a:2}'; //語句 
alert(eval(code1)); //->'a2' 
alert(eval(code2)); //->undefined 
alert(eval('(' + code2 + ')')); //->[object Object] 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章