Я пытаюсь отправить запрос 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",}]
Кто-нибудь знает, как решить эту проблему?
Пожалуйста, помогите мне. Заранее спасибо 🙂
У вас есть строка 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' );
Вы также можете использовать $.parseJSON(data)
которые будут явно преобразовывать строку, которая исходит из скрипта PHP в настоящий массив JSON.
Если вы извлекаете 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) }) });
Подробно посмотрите здесь http://api.jquery.com/jQuery.getJSON/