2010-04-07 10 views
5

Saludos,
yo estaba tratando de descubrir una forma adecuada para enviar errores capturados o excepciones lógica de negocio para el cliente en un sistema Ajax-PHP. En mi caso, el navegador necesita reaccionar de manera diferente dependiendo de si una solicitud fue exitosa o no. Sin embargo, en todos los ejemplos que he encontrado, solo una secuencia simple se informa al navegador en ambos casos. Por ejemplo:mecanismo adecuado para el envío de errores de PHP al cliente

if (something worked) 
    echo "Success!"; 
else 
    echo "ERROR: that failed"; 

Así que cuando el navegador vuelve la respuesta Ajax, la única manera de saber si se ha producido un error sería la de analizar la cadena (en busca de 'error' tal vez). Esto parece torpe.

¿Existe alguna forma mejor o más adecuada para devolver la respuesta Ajax & notificarle al navegador acerca de algún error?
Gracias.

+0

eXtensible Markup Language? –

Respuesta

1

lo general envíe de vuelta una respuesta JSON como esto:

$response = array('status' => 'error', 'message' => 'an unknown error occured'); 

if(some_process()) { 
    $response['status'] = 'success'; 
    $response['message'] = 'Everything went better than expected.'; 
} else { 
    $response['message'] = "Couldn't reticulate splines."; 
} 

die(json_encode($response)); 

lo tanto, puedo comprobar el estado de response.status en mi JavaScript y busque un valor de "éxito" o "error" y la pantalla response.message apropiadamente .

+0

Es reconfortante saber que no hay un mecanismo definitivo que simplemente haya pasado por alto. –

4

Puede enviar un código de estado HTTP de 500 (error interno del servidor) y luego incluir el mensaje de error en el cuerpo. La biblioteca AJAX de su cliente debe manejarlo como un error (y llamar a una devolución de llamada apropiada, etc.) sin tener que buscar cadenas en la respuesta.

+0

+1 jQuery por ejemplo acepta diferentes funciones de devolución de llamada para solicitudes exitosas y fallidas en sus métodos Ajax. – selfawaresoup

1

mostrando al usuario un estado de lo que está sucediendo y lo que ha sucedido es muy importante.

Si desea estructurar sus respuestas ajax, debe buscar en el formato json.

if (something worked) 
    echo '{ "error": 0 }'; 
else 
    echo '{ "error": 1 }'; 

Una vez que haya entrado en el mundo json, podrá enviar una salida más estructurada. Por ejemplo:

if (something worked) 
    echo '{ "error": 0 }'; 
else 
    echo '{ "error": 1, "code": 889, "desc": "Something bad happened" }'; 

Cuando recibe esta salida en JavaScript, puede transformarlo en un objeto y tomar acciones en función de las diferentes teclas.

Los json2.js biblioteca ayudarán a transformar su salida en un objeto

1

El envío de las cabeceras HTTP apropiadas debe hacer el truco y para decir las secuencias de comandos ajax para ejecutar la devolución de llamada derecha. Cada marco de JavaScript que conozco tiene un éxito y una devolución de llamada de error para sus solicitudes de XHR.

header('HTTP/1.1 500 Internal Server Error');

1

Usted puede devolver un objeto JSON que contiene un mensaje de código de error personalizado y error que se puede entonces o bien manejar o visualizar directamente a sus usuarios:

{ 
    "response": 10, 
    "message": "The database didn't work or something" 
} 

Sería trabajar para el éxito también:

{ 
    "response": 1, 
    "message": "It worked! Yippee!" 
} 
Cuestiones relacionadas