Ir para o conteúdo
N3lson

[Resolvido] Resposta de ajax de acordo com resultado php

Mensagens Recomendadas

N3lson

Boas tenho o seguinte script:

$('#botao_executar').click(function(e){

   e.preventDefault();
   $loading.show();

   $.ajax({
    type	   : "POST",
    url	    : "./sources/" + $pasta + "/" + $url + ".php",
    data	   : $('#form_ajax').serialize(),
    beforeSend: function(){
	    $loading.html($imgLoad);
    },
    success    : function(resultadoPhp){
	    setTimeout(function(){
		    $loading.html(resultadoPhp);
	    },5000);
    },
    error	  : function(resultadoPhp){
	    setTimeout(function(){
		    $loading.html(resultadoPhp);
	    },5000);
    },
    complete   : function(){
		    setTimeout(function(){
			    $('.popup').hide();
		    },8000);
		    setTimeout(function(){
			    window.location.href = $link_reload;
	    }, 8000);
    }
   });

});

Mas gostaria de receber a info do tipo de erro gerado pelo php, erro de mysql, erro de script, etc...


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

Olá,

a minha sugestão será apanhares todos os erros/excepções no php e devolveres uma resposta em conformidade.

Depois processas esta resposta no método "sucess" da tua chamada ajax.

já agora, podes explicar o sentido dos setTimeout que tens? É que estás apenas a escrever/colocar o valor de $resultadoPhp a cada 5 segundos....mas este valor nunca muda. (muda quando chamas a função $.ajax outra vez mas aí não precisas do timeout....)

Editado por tiago.f

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

A ideia era fazer o tempo de para o servidor dar a resposta e o user verificar a mensagem.

Como farias para melhorar, estou ainda em iniciação em Jquery

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

Oi,

As funções success, error, complete só são chamadas quando a resposta chega (ou um erro ocorre) - são callbacks. Não é necessário esperar explicitamente.

O que sugiro é, no php teres algo do tipo:

<?php
$inputs = $_POST;
try {
validaInputs($inputs);
$html = geraUmHTMLInteressante($inputs);
echo $html;
} catch (Exception $e) {
echo $e->getMessage();;
}

Depois o teu ajax deveria ser algo do tipo:

$('#botao_executar').click(function(e){
e.preventDefault();
$loading.show();
$.ajax({
	 type		 : "POST",
	 url	 : "./sources/" + $pasta + "/" + $url + ".php",
	 data		 : $('#form_ajax').serialize(),
	 beforeSend: function(){
			 $loading.html($imgLoad);
	 },
	 success : function(resultadoPhp){
			 $loading.html(resultadoPhp);
	 },
	 error : function( jqXHR, textStatus, errorThrown ){
			 $loading.html("Erro: " + textStatus + errorThrown);
	 },
	 complete : function(){
//			 $('.popup').hide(); Não precisas disto já que fazes reload
			 window.location.href = $link_reload;
	 }
});
});

EDIT: esqueci-me de dizer que, nas funções php validaInput e geraUmHTMLInteressante, deve lançar um excepção caso encontres algum erro. tipo:

throw new Exception("o input xpto deve ser numérico");

Editado por tiago.f
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

Obrigado.

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

O que queria fazer era se ocorrer o erro php mostrar mas não fazer o redireccionamento


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

A tua função complete é executada sempre que o pedido ajax é feito, independentemente de ser bem sucedido ou não.

Ajusta por isso o que fazer nela (se é que queres fazer algo).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson

O que pretendia era , imagina que deu erro na execução do php (a mensagem de erro) então queria que se houvesse esse erro não fizesse o redireccionamento no "complete", e sim ficasse estanque de forma a dar tempo o utilizador para ler a mensagem de erro (daí os meus setTimeout).

nesse div ($loading) criaria um botão para clicar e fechar o aviso.

Era essa a minha intenção inicial

* uma nota que referiste anteriormente sobre o refresh ( a variável $link_reload não faz refresh , mas executa outra página com outros valores)

Editado por N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

a instrução:

window.location.href = $link_reload;

diz ao browser para navegar para $link_reload (qual seja o valor desta variável).

Se não queres redirecionar, não coloques esta linha....

EDIT: como disse no outro post, o complete executa sempre, ou seja, as instruções que lá estão dentro são executados independentemente do resultado da chamada ajax:

Se a chamada for bem sucedida ele executa o success e o complete

Se houver um erro (falta de rede por exemplo) ele executa o error e o complete.

Editado por tiago.f
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.