Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Bruno

Tratamento de Erros JSONP

Recommended Posts

Criei uma função para buscar um endereço (logradouro, bairro, cidade, uf) a partir de cep fornecido.

É feito uma requisição em um servidor externo utilizando jsonp, com a seguinte função:

 

function buscaEndereco(cep){
   url = "http://cep.paicon.com.br/jsonp/"+ cep +"?callback=montaEndereco";
   $.ajax({
url: url,
dataType: 'jsonp',
crossDomain: true,
jsonp: false
   })
}

 

Quando a requisição é bem sucedida e o cep encontrado, é chamado a função "montaEndereco" como esperado.

 

Porém, quando o cep fornecido é invalido, a página que eu consulto não retorna nada, consequentemente não é chamado a função de callback "montaEndereco".

 

Gostaria de exibir uma mensagem ao usuário quando o cep é invalido ou não foi encontrado.

 

Como eu poderia tratar esse erro?

 

 

Espero que eu tenha conseguido ser claro.

Muito Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca usei JSONP, mas o correto não seria você disparar ou não a função/método montaEndereco no success da requisição?

 

Porque dessa forma você verificaria, dentro do success, se há algum retorno e se houver e a decodificação do JSON for feita corretamente (não retornar FALSE), então daí sim você chama seu callback.

 

Se estiver em branco, nulo, FALSE, inválido e etc, você dispara um alert, por exemplo.

 

Isso porque independente de ter encontrado um CEP ou não, a REQUISIÇÃO foi feita com sucesso. O problema é do serviço que não implementou um retorno para quando o CEP não existir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei uma função para buscar um endereço (logradouro, bairro, cidade, uf) a partir de cep fornecido.

É feito uma requisição em um servidor externo utilizando jsonp, com a seguinte função:

 

function buscaEndereco(cep){
   url = "http://cep.paicon.com.br/jsonp/"+ cep +"?callback=montaEndereco";
   $.ajax({
url: url,
dataType: 'jsonp',
crossDomain: true,
jsonp: false
   })
}

 

Quando a requisição é bem sucedida e o cep encontrado, é chamado a função "montaEndereco" como esperado.

 

Porém, quando o cep fornecido é invalido, a página que eu consulto não retorna nada, consequentemente não é chamado a função de callback "montaEndereco".

 

Gostaria de exibir uma mensagem ao usuário quando o cep é invalido ou não foi encontrado.

 

Como eu poderia tratar esse erro?

 

 

Espero que eu tenha conseguido ser claro.

Muito Obrigado!

 

Armazene o json dentro de outro objeto e retorne dentro de algum dos índices os status do método. Tipo, retorna 0 se tudo ocorrer bem e retorna 1 caso não retorne nada ou ocorra um erro

Exemplo:

 

objeto: {
status	: 0,	// Aqui você armazena os status de erro que podem ser tratados por você mesmo
data	: {}	// Aqui vai seu json
}
}

 

Ai pra tratar o retorno a sintaxe é quase a mesma:

 

var buscaEndereco	= function(cep) {
var url	= "http://cep.paicon.com.br/jsonp/" + cep + "?callback=montaEndereco";

$.ajax({
	url		: url,
	dataType	: 'jsonp',
	crossDomain	: true,
	jsonp		: false
}).done(function(retorno) {
	var status	= retorno.objeto.status;

	if(status == 0) {
		// Faz o de sempre
	} selse if(status == 1) {
		// Trata o erro e recupera o mesmo objeto assim: 'retorno.objeto.data'
	}
});
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Armazene o json dentro de outro objeto e retorne dentro de algum dos índices os status do método. Tipo, retorna 0 se tudo ocorrer bem e retorna 1 caso não retorne nada ou ocorra um erro

Exemplo:

 

objeto: {
status	: 0,	// Aqui você armazena os status de erro que podem ser tratados por você mesmo
data	: {}	// Aqui vai seu json
}
}

 

Ai pra tratar o retorno a sintaxe é quase a mesma:

 

var buscaEndereco	= function(cep) {
var url	= "http://cep.paicon.com.br/jsonp/" + cep + "?callback=montaEndereco";

$.ajax({
	url		: url,
	dataType	: 'jsonp',
	crossDomain	: true,
	jsonp		: false
}).done(function(retorno) {
	var status	= retorno.objeto.status;

	if(status == 0) {
		// Faz o de sempre
	} else if(status == 1) {
		// Trata o erro e recupera o mesmo objeto assim: 'retorno.objeto.data'
	}
});
};

 

Tem um bug ali no else que tava errado (tava escrito selse)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.