TypeError: inválido ‘in’ operando obj na versão 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); }); } }); 

Este é o meu código. Ajax sucesso Estou recebendo resposta JSON. A resposta está no formato de matriz. E quero alertar a resposta. Mas recebendo erro "TypeError: invalid 'in' operand obj" para JQuery versão 1.9.1.

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

Eu recebi este erro depois que eu codifiquei duas vezes uma matriz JSON. Talvez isso ajude alguém.

Use dataType: "json" para que o jQuery analise a resposta como JSON. Isso resolverá seu problema.

Eu tive o mesmo problema. O erro está sendo triggersdo da function jQuery ‘isArraylike (obj)’ da seguinte linha:

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

O operador Javascript ‘in’ precisa de um object como operando, então é provável que se você fizer jQuery.type (response), ele mostrará algo diferente de um object (por exemplo, string ou null).

Portanto, a resposta de Amit deve funcionar – se não, verifique o tipo de dados de resposta e trabalhe a partir daí.

Mesmo erro, no meu caso, em vez de definir local como uma matriz, eu estava definindo como uma string. JSON.parse ele fez o truque.

Experimente este, trabalhei para mim

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

Por alguma razão (que eu não sei), a resposta é considerada uma string e não um object, então você tem que ‘convertê-lo’ usando eval() .

Eu estava recebendo esse erro ao enviar uma matriz de nomes de coluna para jQuery DataTables. A matriz precisa ser uma matriz de objects, não apenas uma matriz de nomes. link para colunas

Colunas BAD: [“Coluna1”, “Coluna2”]

BOAS colunas: [{title: “Column1”}, {title: “Column2”}]