¿Existe una manera limpia y fácil de lanzar excepciones php a través de una llamada jquery de respuesta jquery/ajax?Manera limpia de lanzar una excepción php a través de jquery/ajax y json
Respuesta
Se podría hacer algo como esto en PHP (suponiendo que esto se llama a través de AJAX):
<?php
try {
if (some_bad_condition) {
throw new Exception('Test error', 123);
}
echo json_encode(array(
'result' => 'vanilla!',
));
} catch (Exception $e) {
echo json_encode(array(
'error' => array(
'msg' => $e->getMessage(),
'code' => $e->getCode(),
),
));
}
En JavaScript:
$.ajax({
// ...
success: function(data) {
if (data.error) {
// handle the error
throw data.error.msg;
}
alert(data.result);
}
});
También puede desencadenar el manejador de error:
$ .ajax () al devolver un encabezado de 400 (por ejemplo):
header('HTTP/1.0 400 Bad error');
O use Status:
si estás en FastCGI. Tenga en cuenta que el controlador error:
no recibe los detalles del error; para lograr eso, tiene que anular el funcionamiento de $.ajax()
:)
Facebook hacer algo en su SDK PHP donde lanzan una excepción si falla una solicitud HTTP por cualquier razón. Se podría adoptar este enfoque, y simplemente devolver el error y excepción detalles si se produce una excepción:
<?php
header('Content-Type: application/json');
try {
// something; result successful
echo json_encode(array(
'results' => $results
));
}
catch (Exception $e) {
echo json_encode(array(
'error' => array(
'code' => $e->getCode(),
'message' => $e->getMessage()
)
));
}
continuación, puede simplemente escuchar la tecla error
en su llamadas Ajax en JavaScript:
<script>
$.getJSON('http://example.com/some_endpoint.php', function(response) {
if (response.error) {
// an error occurred
}
else {
$.each(response.results, function(i, result) {
// do something with each result
});
}
});
</script>
Si todos los errores se deben tratar de la misma manera (mostrando un cuadro de diálogo, por ejemplo). Puede hacerlo de esta manera:
PHP Fin:
public function throwJsonException($msg) {
echo json_encode(array('error'=> true, 'msg' => $msg));
}
throwJsonException('login invalid!');
jQuery Fin:
$(document).ajaxSuccess(function(evt, request, settings){
var data=request.responseText;
if (data.length>0) {
var resp=$.parseJSON(data);
if (resp.error)
{
showDialog(resp.msg);
return;
}
}
});
Como complemento a las respuestas anteriores, en vez de repetir el mismo código para JSON codificación en todas sus excepciones, puede configurar un manejador de excepciones para que se use solo en los scripts necesarios. Por ejemplo:
function ajaxExceptionHandler($e) {
echo json_encode(array(
'error' => array(
'code' => $e->getCode(),
'msg' => $e->getMessage())
));
}
Luego, en el controlador de ajax,
set_exception_handler('ajaxExceptionHandler');
- 1. Cómo lanzar una excepción matriz en PHP
- 2. Lanzar una nueva excepción al lanzar una excepción antigua
- 3. ¿Hay una forma estática de lanzar excepción en php
- 4. PHP - Desplazamiento a través de JSON file_get_contents
- 5. Cómo volver a lanzar una excepción
- 6. Lanzar manualmente una excepción
- 7. Capturando varias excepciones y volviendo a lanzar una excepción general
- 8. Powershell: crear y lanzar una nueva excepción
- 9. Lanzar una excepción personalizada de un servicio a una actividad
- 10. Cómo buscar a través de una matriz JSON en PHP
- 11. Cuándo devolver bool, lanzar una excepción y qué excepción arrojar
- 12. Llamar a un WebMethod usando jQueryAjax "GET"
- 13. php: bucle a través matriz JSON
- 14. ¿Puede Monitor.Enter lanzar una excepción?
- 15. Java: ¿forma limpia de lanzar automáticamente UnsupportedOperationException al llamar a hashCode() y equals()?
- 16. Enviar datos JSON a través de JQuery ajax.post a PHP
- 17. Confundido sobre cuándo lanzar una excepción
- 18. Volver a lanzar una excepción de destino InvocationTargetException
- 19. ¿Es apropiado lanzar una excepción de CoerceValueCallback
- 20. enlace de datos y lanzar una excepción en el colocador
- 21. java: no se puede volver a lanzar una excepción: no controlada tipo de excepción Excepción
- 22. Diferencia entre llamar a sys.exit() y lanzar excepción
- 23. ¿Cómo forzar a Java a lanzar una excepción aritmética?
- 24. C++ manera -El derecho a lanzar y atrapar excepciones
- 25. lanzar una excepción en el hilo C#
- 26. ¿Debería una violación a las reglas comerciales lanzar una excepción?
- 27. Lanzar una excepción en lugar de un error de una extensión de PHP
- 28. Excepción ReSharper volver a lanzar posiblemente destinado
- 29. ¿Lanzar excepción al volver a asignar una constante en Ruby?
- 30. Lanzar Excepción genérica desalentado?
¿Por qué quiere lanzar una excepción? Es probable que sea mejor devolver un estado de error que no desencadene una excepción. – doublesharp
Quiero decir que he intentado captar en el lado del servidor, y quiero poner el mensaje de error en la respuesta JSON. – madphp