Czy istnieje czysty, łatwy sposób na wyrzucanie wyjątków php za pomocą wywołania jsonów/wywołania ajax json.Czysty sposób na wyrzucenie wyjątku php za pośrednictwem jquery/ajax i json
Odpowiedz
Można zrobić coś takiego w PHP (zakładając, że ta jest wywoływana za pośrednictwem 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(),
),
));
}
W javascript:
$.ajax({
// ...
success: function(data) {
if (data.error) {
// handle the error
throw data.error.msg;
}
alert(data.result);
}
});
Można również wywołać procedurę obsługi z $ .ajax error:
() zwracając 400 (na przykład) nagłówek:
header('HTTP/1.0 400 Bad error');
Lub użyj Status:
jeśli korzystasz z FastCGI. Zwróć uwagę, że program obsługi error:
nie otrzymuje szczegółów błędu; Aby to osiągnąć, musisz nadpisać jak działa $.ajax()
:)
Facebook zrobić coś w swoim pakiecie SDK PHP, gdzie wyrzucają wyjątek, jeśli żądanie HTTP nie powiodło się z jakiegokolwiek powodu. Można przyjąć takie podejście, i po prostu przywrócić dane o błędach i wyjątek, jeśli jest wyjątek:
<?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()
)
));
}
Następnie można tylko słuchać na klucz w swoim AJAX error
wywołuje w 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>
Jeśli wszystkie błędy powinny być traktowane w ten sam sposób (np. Pokazujące okno dialogowe). Można zrobić to w ten sposób:
PHP Koniec:
public function throwJsonException($msg) {
echo json_encode(array('error'=> true, 'msg' => $msg));
}
throwJsonException('login invalid!');
jQuery Koniec:
$(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;
}
}
});
Jako uzupełnienie do poprzednich odpowiedzi, zamiast powtarzać tego samego kodu do kodowania json w wszystkie twoje wyjątki, możesz ustawić obsługę wyjątków, która będzie używana tylko w potrzebnych skryptach. Na przykład:
function ajaxExceptionHandler($e) {
echo json_encode(array(
'error' => array(
'code' => $e->getCode(),
'msg' => $e->getMessage())
));
}
Następnie w ajax obsługi,
set_exception_handler('ajaxExceptionHandler');
- 1. wyrzucenie i wyłapanie wyjątku z funkcji
- 2. php jak przechowywać i czytać dane json za pośrednictwem mysql?
- 3. Czysty klient torrentowy PHP?
- 4. .NET ASMX - powracający czysty JSON?
- 5. curl_setopt() wyrzucenie wyjątku błędu podczas próby przesłania pliku przez curl w php
- 6. Wywołanie WebMethod przy użyciu jQueryAjax „GET”
- 7. Czysty i najbardziej Pythonowy sposób na jutrzejszy termin?
- 8. Czysty sposób rzutowania na rzeczywisty typ obiektu
- 9. Jaki jest idiomatyczny sposób na wyrzucenie PersistentQueue w ref?
- 10. Najlepszy sposób na przeniesienie obiektu Entity Framework przez Internet iz powrotem za pośrednictwem JSON
- 11. Wykonywanie komend na zdalnym komputerze za pośrednictwem PHP
- 12. Jak wymusić na kompilatorze C# wyrzucenie wyjątku, gdy jakakolwiek operacja matematyczna generuje "NaN"?
- 13. jQuery Znaczniki (autouzupełnianie) lista Pobieranie JSON za pośrednictwem AJAX
- 14. Jak wykonać plik wsadowy za pośrednictwem PHP?
- 15. Clojure: Idiomatyczny/czysty sposób na uniknięcie NPE w monadowy sposób
- 16. backbone.js - Zarówno kliknij i kliknij dwukrotnie zdarzenie wyrzucenie na elemencie
- 17. Proces wykonywania Golanga i jego wyrzucenie
- 18. Jak rzucić wyjątek, gdy podpis metody nie pozwala na wyrzucenie wyjątku?
- 19. Przekazywanie zmiennej kodowanej JSON z PHP do Javascript za pośrednictwem POST
- 20. Niestandardowe logowanie za pomocą htaccess za pośrednictwem HTML/PHP
- 21. jQuery, JSON, PHP i gMap
- 22. Jak wygenerować json za pomocą php?
- 23. Dobry sposób na debugowanie wyjątku nullPointerException
- 24. Właściwy sposób na podniesienie wyjątku w python?
- 25. Jaki jest czysty sposób przekonwertowania wyniku na opcję?
- 26. Czysty sposób konwertowania Pythona 3 Unicode na std :: string
- 27. Zintegruj JavaScript w komponentach JSF, czysty sposób.
- 28. php imap - pobierz ciało i zrób czysty tekst
- 29. Wysyłanie wielu wyników z PHP za pośrednictwem AJAX
- 30. Wysyłanie JSON za pośrednictwem żądania CURL POST do Sinatry
Dlaczego chcesz rzucić wyjątek? Prawdopodobnie lepiej jest zwrócić stan błędu, który nie wyzwala wyjątku. – doublesharp
Mam na myśli próbuję złapać po stronie serwera, i chcę umieścić komunikat o błędzie w odpowiedzi json. – madphp