Ответ 1
success: function(response) {
response=JSON.parse(response);
$.each(response, function(key, val) {
alert(val.id);
});
}
$.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.
success: function(response) {
response=JSON.parse(response);
$.each(response, function(key, val) {
alert(val.id);
});
}
Я получил эту ошибку после того, как дважды закодировал массив JSON. Может быть, это поможет любому.
У меня была та же проблема. Ошибка запускается из функции 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)
Итак, ответ Амита должен работать, если нет, проверьте тип данных ответа и оттуда.
Используйте dataType: "json"
, чтобы jQuery проанализировал ответ как JSON. Это решит вашу проблему.
Такая же ошибка, в моем случае вместо определения локального массива, я определял ее как строку. JSON.parse
он сделал трюк.
Попробуй это, сработал у меня
$.each(eval(response), function(key, val)
По какой-то причине (чего я не знаю) ответ считается строкой, а не объектом, поэтому вам нужно "преобразовать ее" с помощью eval()
.
Я получал эту ошибку при отправке массива имен столбцов в jQuery DataTables. Массив должен быть массивом объектов, а не просто массивом имен. ссылка на столбцы
BAD столбцы: [ "Column1", "Column2" ]
ХОРОШО столбцы: [{title: "Column1" }, {title: "Column2" }]