Como você pode lidar com erros em uma chamada getJSON? Estou tentando fazer referência a um serviço de script entre domínios usando jsonp, como você registra um método de erro?
jquery
cross-domain
jsonp
getjson
Ajay
fonte
fonte
Respostas:
$.getJSON()
é um tipo de abstração de uma chamada AJAX comum, na qual você precisa informar que deseja uma resposta codificada em JSON.Você pode manipular erros de duas maneiras: genericamente (configurando suas chamadas AJAX antes de realmente chamá-las) ou especificamente (com cadeia de métodos).
'genérico' seria algo como:
E a maneira 'específica':
fonte
JSONP
, pois parece quegetJSON
nesse caso não chama aerror()
função. Estou tendo o mesmo problema. Eu acho que tem a ver com a forma comoJSONP
é tratado totalmente diferente dasAJAX
chamadas normais ,jQuery
apesar degetJSON
lidar com ambas.JSON
é feito com umXMLHTTPRequest
objeto, masJSONP
é feito adicionando uma<script>
tag dinamicamente às páginas da páginaHEAD
.Alguém deu a Luciano esses pontos :) Acabei de testar sua resposta - tinha uma pergunta semelhante - e funcionou perfeitamente ...
Eu até adiciono meus 50 centavos:
fonte
Aqui está a minha adição.
De http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html e a fonte oficial
" Os métodos de retorno de chamada jqXHR.success (), jqXHR.error () e jqXHR.complete () introduzidos no jQuery 1.5 foram preteridos a partir do jQuery 1.8. Para preparar seu código para sua eventual remoção, use jqXHR.done (), jqXHR .fail () e jqXHR.always (). "
Eu fiz isso e aqui está o trecho de código atualizado de Luciano:
E com a descrição do erro mais mostrando todos os dados do json como uma string:
Se você não gosta de alertas, substitua-os por
console.log
fonte
Eu sei que já faz um tempo desde que alguém respondeu aqui e o pôster provavelmente já recebeu sua resposta daqui ou de algum outro lugar. No entanto, acho que este post ajudará quem procura uma maneira de acompanhar erros e tempos limite ao fazer solicitações getJSON. Portanto, abaixo da minha resposta à pergunta
A estrutura getJSON é a seguinte (encontrada em http://api.jqueri.com ):
a maioria das pessoas implementa esse uso
onde eles usam o url var para fornecer um link para os dados JSON, o envio de dados como um local para adicionar as
"?callback=?"
e outras variáveis que precisam ser enviadas para que os dados JSON corretos sejam retornados e a função de sucesso como uma função para processar os dados .No entanto, você pode adicionar as variáveis status e xhr em sua função de sucesso. A variável status contém uma das seguintes seqüências de caracteres: "success", "notmodified", "error", "timeout" ou "parsererror", e a variável xhr contém o objeto XMLHttpRequest retornado ( encontrado em w3schools )
Dessa forma, é fácil manter o controle de tempos limite e erros sem a necessidade de implementar um rastreador de tempo limite personalizado iniciado após a solicitação.
Espero que isso ajude alguém que ainda esteja procurando uma resposta para essa pergunta.
fonte
É corrigido no jQuery 2.x; No jQuery 1.x, você nunca receberá um retorno de chamada de erro
fonte
Fui confrontado com esse mesmo problema, mas, em vez de criar retornos de chamada para uma solicitação com falha, simplesmente retornei um erro com o objeto de dados json.
Se possível, essa parece ser a solução mais fácil. Aqui está uma amostra do código Python que eu usei. (Usando o Flask, os jsonify f e SQLAlchemy do Flask)
Então você pode verificar o Javascript assim;
fonte
Por que não
??
Para obter detalhes sobre o
.fail()
método usado (jQuery 1.5+), consulte http://api.jquery.com/jQuery.ajax/#jqXHRComo o
jqXHR
é retornado pela função, um encadeamento comoé possível.
fonte
Em alguns casos, você pode encontrar um problema de sincronização com este método. Eu escrevi a chamada de retorno de chamada dentro de uma
setTimeout
função e funcionou de forma síncrona muito bem =)POR EXEMPLO:
fonte