TypeError: недействительный 'in' операнд obj в версии jquery 1.9.1

$.ajax({
    async: false,
    type: "POST",
    url: url+"module/listing/"+projectId,
    data: "ajax=true",
    success: function(response) {
        $.each(response, function(key, val) {
        alert(val.id);
        });
    }
});

Это мой код. Успех Ajax. Я получаю ответ JSON. Ответ - в формате массива. И я хочу предупредить ответ. Но получение ошибки "TypeError: invalid 'in' operand obj" для версии JQuery 1.9.1.

Ответ 1

success: function(response) {
        response=JSON.parse(response);
        $.each(response, function(key, val) {
        alert(val.id);
        });
    }

Ответ 2

Я получил эту ошибку после того, как дважды закодировал массив JSON. Может быть, это поможет любому.

Ответ 3

У меня была та же проблема. Ошибка запускается из функции jQuery 'isArraylike (obj)' из следующей строки:

return type === "array" || type !== "function" &&
    ( length === 0 ||
    typeof length === "number" && length > 0 && ( length - 1 ) in obj );

Оператору Javascript 'in' нужен объект как операнд, поэтому есть вероятность, что если вы выполните jQuery.type(response), он покажет что-то другое, кроме объекта (например, string или null)

Итак, ответ Амита должен работать, если нет, проверьте тип данных ответа и оттуда.

Ответ 4

Используйте dataType: "json", чтобы jQuery проанализировал ответ как JSON. Это решит вашу проблему.

Ответ 5

Такая же ошибка, в моем случае вместо определения локального массива, я определял ее как строку. JSON.parse он сделал трюк.

Ответ 6

Попробуй это, сработал у меня

$.each(eval(response), function(key, val)

По какой-то причине (чего я не знаю) ответ считается строкой, а не объектом, поэтому вам нужно "преобразовать ее" с помощью eval().

Ответ 7

Я получал эту ошибку при отправке массива имен столбцов в jQuery DataTables. Массив должен быть массивом объектов, а не просто массивом имен. ссылка на столбцы

BAD столбцы: [ "Column1", "Column2" ]

ХОРОШО столбцы: [{title: "Column1" }, {title: "Column2" }]