Intereting Posts
PHP Session не сохраняется в Firefox после перенаправления Уведомление push iOS не работает при использовании планировщика crontab удалять дублирующие поля в строках результата php-mysql Количество столбцов MySQL не соответствует количеству значений в строке 1 PHP: разница между '&&' и 'AND' Использование DOMXPath для замены узла при сохранении его положения PHP / Apache: PHP Неустранимая ошибка: вызов неопределенной функции mysql_connect () Doctrine – Как распечатать реальный sql, а не только подготовленное заявление? Codeigniter Session – доступ к значению Userdata для всех пользователей из DB Несколько таблиц с одним отношением (Laravel) Шаблоны проектирования. Как создать объект базы данных / соединение только при необходимости? Замена тегов в фигурных скобках, даже вложенных тегах, с регулярным выражением Как извлечь значение из веб-сайта (используя cUrl в PHP) PHP Неустранимая ошибка: класс PDO не найден Как проверить Google reCaptcha в форме Submit

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",}] 

Кто-нибудь знает, как решить эту проблему?

Пожалуйста, помогите мне. Заранее спасибо 🙂

У вас есть строка 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/