JSフロントエンドがバックグラウンドサーバから返されるJSONデータを取得し解析する方法
2406 ワード
要旨:主な紹介: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()に1回実行するオブジェクト化処理が必要です.
var dataObj=eval("("+data+")");//jsonオブジェクトに変換する気づいたかもしれませんが、なぜevalパラメータには「(」+data+」「)」というカッコ付きの形式が書かれているのでしょうか.
理由:
前述したように、eval()関数はパラメータ内の式を実行できます!
Jsonは「{}」で開始および終了するため、JSでは文ブロックとして扱われるため、強制的に式に変換する必要がある.
カッコ付けの目的は、eval関数がJavaScriptコードを処理するときにカッコ内の式(expression)を文(statement)として実行するのではなく、オブジェクトに強制的に変換することです.
たとえば、オブジェクトの字面量{}のように、外側のカッコを付けない場合、evalはカッコをJavaScriptコードブロックの開始と終了フラグとして認識し、{}は空の文を実行したとみなされます.次の2つの実行結果は異なります.
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);
});
});
転載元:http://www.exp99.com/f2e/qianduankaifa_77.html
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()に1回実行するオブジェクト化処理が必要です.
var dataObj=eval("("+data+")");//jsonオブジェクトに変換する気づいたかもしれませんが、なぜevalパラメータには「(」+data+」「)」というカッコ付きの形式が書かれているのでしょうか.
理由:
前述したように、eval()関数はパラメータ内の式を実行できます!
Jsonは「{}」で開始および終了するため、JSでは文ブロックとして扱われるため、強制的に式に変換する必要がある.
カッコ付けの目的は、eval関数がJavaScriptコードを処理するときにカッコ内の式(expression)を文(statement)として実行するのではなく、オブジェクトに強制的に変換することです.
たとえば、オブジェクトの字面量{}のように、外側のカッコを付けない場合、evalはカッコをJavaScriptコードブロックの開始と終了フラグとして認識し、{}は空の文を実行したとみなされます.次の2つの実行結果は異なります.
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);
});
});
転載元:http://www.exp99.com/f2e/qianduankaifa_77.html