JQuery - Uncaught TypeError: не может использовать оператор 'in' для поиска '324' в
Я пытаюсь отправить запрос Get с помощью ajax и выводить данные json, возвращаемые сервером в html.
Но я получил эту ошибку.
Uncaught TypeError: Cannot use 'in' operator to search for '324' in
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
Это мой код, который отправляет запрос Get в php файл с помощью ajax.
Когда я использую метод $.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)
})
}
)
})
Это мой PHP-код, который возвращает результат запроса в формате json.
public function actionAjax(){
$parentCatId=$_GET['parentCatId'];
$catData = Category::getTargetCategoryData($parentCatId);
echo CJSON::encode($catData);
Yii::app()->end();
}
Данные json, выводимые этим php, выглядят следующим образом.
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]
Кто-нибудь знает, как исправить эту проблему?
Пожалуйста, помогите мне.
Спасибо заранее:)
Ответы
Ответ 1
У вас есть строка JSON, а не объект. Скажите jQuery, что вы ожидаете ответа JSON, и он проанализирует его для вас. Либо используйте $. GetJSON вместо $. Get, либо передайте аргумент dataType в $.get
:
$.get(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){
$.each(data, function(key, value){
console.log(key + ":" + value)
})
},
'json'
);
Ответ 2
Вы также можете использовать $.parseJSON(data)
, который будет явно преобразовывать строку, которая поступает из PHP скрипт в настоящий массив JSON.
Ответ 3
Если вы извлекаете JSON, используйте $. getJSON(), чтобы он автоматически конвертировал JSON в объект JS.
Ответ 4
Я установил аналогичную ошибку, добавив 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"}]
Ответ 5
Использовать getJSON
$.getJSON(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){
$.each(data, function(key, value){
console.log(key + ":" + value)
})
});
Подробно посмотрите здесь http://api.jquery.com/jQuery.getJSON/