2010-04-07 12 views
5

Pozdrowienia,
Próbowałem znaleźć właściwy sposób wysyłania przechwyconych błędów lub wyjątków logiki biznesowej do klienta w systemie Ajax-PHP. W moim przypadku przeglądarka musi reagować inaczej, w zależności od tego, czy żądanie się powiodło, czy nie. Jednak we wszystkich przykładach, które znalazłem, tylko prosty ciąg jest zgłaszany do przeglądarki w obu przypadkach. Np:Prawidłowy mechanizm wysyłania błędów PHP do klienta

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

Więc gdy przeglądarka wróci odpowiedź Ajax, jedynym sposobem, aby wiedzieć, czy wystąpił błąd będzie analizować ciąg (patrząc na „błędu” być może). Wydaje się to nieporęczne.

Czy istnieje lepszy/poprawny sposób na odesłanie odpowiedzi Ajaxa & powiadomić przeglądarkę o błędzie?
Dziękuję.

+0

eXtensible Markup Language? –

Odpowiedz

1

ja generalnie odesłać odpowiedź JSON tak:

$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)); 

Więc mogę sprawdzić status response.status w moim JavaScript i spojrzeć na wartości „sucess” lub „błąd” i wyświetlaczem response.message odpowiednio miejsca .

+0

To daje pewność, że nie ma ostatecznego mechanizmu, którego po prostu przeoczyłem.Spodziewałem się czegoś bardziej podobnego do kodu statusu http, który byłby ostateczną odpowiedzią. Wydaje się jednak, że dodanie statusu i komunikatów do odpowiedzi jsona jest popularnym wyborem. A ponieważ moje odpowiedzi na bazy danych będą i tak zakodowane, pójdę tą drogą. TY –

4

Możesz odesłać kod stanu HTTP 500 (wewnętrzny błąd serwera), a następnie dołączyć komunikat o błędzie do treści. Biblioteka kliencka AJAX powinna następnie obsłużyć ją jako błąd (i wywołać odpowiedni oddzwanianie itp.) Bez konieczności szukania ciągów znaków w odpowiedzi.

+0

+1 jQuery na przykład akceptuje różne funkcje zwrotne dla udanych i nieudanych żądań w swoich metodach Ajax. – selfawaresoup

1

pokazywanie użytkownikowi statusu tego, co się dzieje i co się wydarzyło jest bardzo ważne.

Chciałbym ustrukturyzować twoje odpowiedzi ajaxowe, powinieneś zajrzeć do formatu json.

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

Gdy postawisz stopę w świecie jsonów, będziesz mógł wysłać bardziej uporządkowane dane wyjściowe. Na przykład:

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

Po otrzymaniu tego wyniku w javascript można przekształcić go w obiekt i podjąć działania w zależności od różnych kluczy.

W json2.js biblioteki pomogą przekształcić swoje wyjście do obiektu

1

wysyłając odpowiednie nagłówki HTTP powinno załatwić sprawę i powiedzieć swoje ajax skrypty do wykonania właściwej zwrotnego. Każdy znany javascript ma wywołanie zwrotne sukcesu i błędu dla żądań XHR.

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

1

można odesłać obiekt JSON, który zawiera komunikat niestandardowy kod błędu i błędu, który można następnie albo obsłużyć lub wyświetlić bezpośrednio do użytkowników:

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

będzie pracować na sukces również:

{ 
    "response": 1, 
    "message": "It worked! Yippee!" 
} 
Powiązane problemy