Подтвердить что ты не робот

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

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

Пожалуйста, помогите мне. Спасибо заранее:)

4b9b3361

Ответ 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/