Pergunta

Estou fazendo um pedido a uma página JSON usando o jQuery's $.getJSON Método, e do JSON retornado, estou criando um pouco de HTML e colocando -o na página.

Os problemas aparecem quando tenho um objeto JSON aninhado, mostrarei um exemplo mais tarde.

Primeiro, se eu fizer uma solicitação à minha página JSON e devolver o seguinte JSON, a função funciona bem e vejo um lindo elemento HTML aparecer na página:

JSON:

({
     "variants": [
         {
             "variantId": "536",
             "title": "Party Like a Rock Star for Two at the Metropolitan hotel, London ",
             "price": "£299.00"         
         }
     ]
})

Isso funciona bem, sem erros.

No entanto, assim que eu retorno o JSON abaixo, a função não funciona.

({
     "variants": [
         {
             "variantId": "536",
             "title": "Party Like a Rock Star for Two at the Metropolitan hotel, London ",
             "price": "£299.00",
             "blogs": [
                 {
                     "title": "Another test",
                     "author": "Sean",
                 },
                 {
                     "title": "This is a test",
                     "author": "Sean",
                 }
             ]
         }
     ]
})

Como você pode ver, não há personagens que causassem que isso também quebraria. Eu também tentei renomear os campos, apenas por acaso que "blogs", "título" ou "autor" eram palavras reservadas em JS (como eu pensava, sem diferença!)

Para garantir que não fosse a minha maneira de processar os dados que estavam causando um problema, coloquei um alerta ('cheguei aqui'); Como a primeira parte do código (veja abaixo) na minha função $ .getjson, e isso não dispara, então eu sei que não é o que estou fazendo com os dados que estão causando um erro.

$.getJSON('/ajax/cover_flow_detail.ashx?experienceId=' + arguments[0], function(d) {
        alert('Got here'); // doesn't fire ?

        // omitted for brevity.

}

Até mais estranho - isso só está acontecendo no IE6. IE7 e ff estão bem.

Qualquer empurrão na direção certa seria apreciada, estou completamente perplexo!

Saúde, Sean

Foi útil?

Solução

Você tem um erro em seu JSON - arrastando vírgulas em algumas de suas definições de objetos.

(Isso sugere que você está gerando seu JSON usando um modelo em vez de uma biblioteca JSON, isso é um erro.)

O IE é menos perdoador desse erro do que outros navegadores.

Outras dicas

Internet Explorer é notório por quebrar vírgulas à direita.

var obj = {
     upper: 1,
     stage: 2,
};

Falha no IE, enquanto outros navegadores ignoram a vírgula à direita após o segundo elemento.

Ironicamente, deve ser errato. Ou seja, fez certo. Os navegadores não devem analisar vagamente o JSON se a sintaxe não estiver certa. O, deve ser tratado como um; então.

Eu acredito que é o analisador, porque no Ext JS, é rigoroso.

Lembre -se de quando as tags HTML que foram mal fechadas seriam ignoradas pelo IE, e não pelo Netscape. Interessante na virada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top