Obiekt jqXHR jQuery przekazany do wywołania zwrotnego w przypadku niepowodzenia nie analizuje odpowiedzi json, dlatego responseJSON jest niezdefiniowany tylko responseText jest dostępny.jquery ajax nie parsuje json na niepowodzenie
To działa dobrze dla pomyślnych żądań, ja ustawienie prawidłowych nagłówków za pomocą dataType: 'json'
połączenia:
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: post_data,
dataType: 'json',
done: done_callback,
fail: fail_callback,
always: always_callback
});
Zapytanie nagłówki:
Accept:application/json, text/javascript, */*; q=0.01
X-Requested-With:XMLHttpRequest
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11
nagłówki odpowiedzi:
Content-Type:application/json;charset=utf-8
Status:500
responseText:
{"status":"error","code":500,"message":"A system error occurred, please try again later"}
responseJSON jest niezdefiniowany
Czy to przypadek, że nie analizuje jQuery json, gdy odpowiedź na żądania ajax nie powiedzie? nie mogę znaleźć żadnej dokumentacji potwierdzenia lub zaprzeczenia tego zachowania (I mogłoby być po prostu nie patrząc na tyle twarde)
mogę oczywiście wystarczy użyć parseJSON
w fail
zwrotnego.
Masz rację. Treść odpowiedzi nie jest "błędna". Jeśli otrzymujesz JSON na 500 błędach, spróbuj go samemu przeanalizować. – Strelok
tak. @Arun dość słusznie wskazał mi dokładnie linię, którą jquery podjęła ta decyzja, aby nie przekazywać odpowiedzi poprzez konwertery typów. – Rob