AjaxでGetリクエストを送信し、サーバーから返されたJSONデータをHTMLで出力しようとしています。
しかし、私はこのエラーを受け取りました。
Uncaught TypeError: Cannot use 'in' operator to search for '324' in
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
これは、ajaxによってphpファイルにGetリクエストを送信する私のコードです。 $ .eachメソッドを使用すると、上記で示したエラーが発生します。
parentCat.on('change', function(e){
parentCatId = $(this).val();
$.get(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){
$.each(data, function(key, value){
console.log(key + ":" + value)
})
}
)
})
これは、クエリ結果をJSON形式で返すPHPコードです。
public function actionAjax(){
$parentCatId=$_GET['parentCatId'];
$catData = Category::getTargetCategoryData($parentCatId);
echo CJSON::encode($catData);
Yii::app()->end();
}
このphpが出力するjsonデータは次のようになります。
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
この問題を修正する方法を知っている人はいますか?
私を助けてください。前もって感謝します :)
PHPスクリプトからの文字列を実際のJSON配列に明示的に変換する$.parseJSON(data)
を使用することもできます。
JSONを取得する場合は、 $。getJSON() を使用して、JSONをJSオブジェクトに自動的に変換します。
Json dataTypeを次のように追加して、同様のエラーを修正しました。
$.ajax({
type: "POST",
url: "someUrl",
dataType: "json",
data: {
varname1 : "varvalue1",
varname2 : "varvalue2"
},
success: function (data) {
$.each(data, function (varname, varvalue){
...
});
}
});
そして、私のコントローラーでは、そのような文字列を二重引用符で囲む必要がありました(注:Javaでエスケープする必要があります)。
@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
// parameters = varname1=varvalue1&varname2=varvalue2
String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
return exampleData;
}
したがって、数字が文字列として使用されている場合は、二重引用符を使用してみてください(最後のコンマを削除します)。
[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
GetJSONを使用する
$.getJSON(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){
$.each(data, function(key, value){
console.log(key + ":" + value)
})
});