Esiste un modo semplice e pulito per generare eccezioni php tramite una chiamata jquery/ajax di risposta json.Modo pulito per lanciare l'eccezione php attraverso jquery/ajax e json
risposta
Si potrebbe fare qualcosa di simile in PHP (supponendo che questo viene chiamata tramite la tecnologia 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(),
),
));
}
In JavaScript:
$.ajax({
// ...
success: function(data) {
if (data.error) {
// handle the error
throw data.error.msg;
}
alert(data.result);
}
});
Si può anche innescare il error:
gestore di $ .ajax () restituendo un intestazione 400 (ad esempio):
header('HTTP/1.0 400 Bad error');
Oppure utilizzare Status:
se sei su FastCGI. Si noti che il gestore error:
non riceve i dettagli dell'errore; per realizzare questo bisogna ignorare come $.ajax()
funziona :)
Facebook fare qualcosa nel loro SDK PHP dove gettano un'eccezione se una richiesta HTTP non riuscito per qualsiasi motivo. Si potrebbe prendere questo approccio, e solo restituire l'errore e eccezione dettagli se viene generata un'eccezione:
<?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()
)
));
}
È quindi possibile solo ascoltare per la chiave error
nel vostro AJAX chiamate in 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>
Se tutti gli errori devono essere trattati allo stesso modo (mostrando una finestra di dialogo per esempio). Si può fare in questo modo:
PHP fine:
public function throwJsonException($msg) {
echo json_encode(array('error'=> true, 'msg' => $msg));
}
throwJsonException('login invalid!');
jQuery fine:
$(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;
}
}
});
Come complemento alle risposte precedenti, invece di ripetere lo stesso codice per la codifica JSON in tutte le eccezioni, è possibile impostare un gestore di eccezioni da utilizzare solo negli script necessari. Per esempio:
function ajaxExceptionHandler($e) {
echo json_encode(array(
'error' => array(
'code' => $e->getCode(),
'msg' => $e->getMessage())
));
}
Poi, nel vostro gestore ajax,
set_exception_handler('ajaxExceptionHandler');
- 1. Flask display JSON in un modo pulito
- 2. PHP e scrittura codice pulito
- 3. Modo pulito per arrestare Logstash
- 4. Java: modo pulito per lanciare UnsupportedOperationException quando si chiama hashCode() ed equals()?
- 5. Chiamare un WebMethod utilizzando jQueryAjax "GET"
- 6. Git pre-receive per lanciare PHP CodeSniffer
- 7. Modo pulito per evitare I18n :: InvalidLocale?
- 8. Loop attraverso JSON in EJS
- 9. Ciclo attraverso l'oggetto JSON Elenco
- 10. C'è un modo per convertire json in xml in PHP?
- 11. loop attraverso json array jquery
- 12. Qual è il modo più pulito per gestire gli errori di convalida con PHP?
- 13. Applicazioni per iPhone e iPad Lanciare immagini
- 14. iPhone - presentModalViewController via UITabBarItem e dismissModalViewController modo pulito
- 15. php: scorrere json serie
- 16. Perché "lanciare" e "lanciare ex" in un blocco catch si comportano allo stesso modo?
- 17. PHP/JSON - stdClass Object
- 18. modo pulito per dividere una serie in tre parti e visualizzare all'utente
- 19. Modo pulito per mappare un array in node.js o JavaScript
- 20. Modo pulito per convertire Python 3 Unicode in std :: string
- 21. Analisi JSON e la ricerca attraverso di essa
- 22. C'è un modo pulito per visualizzare un trattino con haml
- 23. Unity 5: modo pulito per gestire GameObjects creati dinamicamente
- 24. Lanciare la moneta per imparare PHP o JavaScript prima
- 25. C'è un modo per rendere DataContractSerializer più pulito XML?
- 26. Modo più pulito per scrivere element.parent(). Parent(). Parent(). Parent(). Parent()
- 27. Modo pulito per disabilitare `__setattr__` fino a dopo l'inizializzazione
- 28. React.js - modo pulito per differenziare carico/stati vuoti in Render
- 29. modo pulito per ottenere la data dello scorso venerdì
- 30. Modo pulito Guava per gestire la raccolta eventualmente-null
Perché vuoi per generare un'eccezione? Sarebbe probabilmente meglio restituire uno stato di errore che non innesca un'eccezione. – doublesharp
Voglio dire, ho provato a catturare sul lato server, e voglio inserire il messaggio di errore nella risposta JSON. – madphp