example - Manejar 500 errores en JSON(jQuery)
jquery ajax post (5)
Esta solicitud JSON:
$.ajax({
url:jSONurl+''?orderID=''+thisOrderID+''&variationID=''+thisVariationID+''&quantity=''+thisQuantity+''&callback=?'',
async: false,
type: ''POST'',
dataType: ''json'',
success: function(data) {
if (data.response == ''success''){
//show the tick. allow the booking to go through
$(''#loadingSML''+thisVariationID).hide();
$(''#tick''+thisVariationID).show();
}else{
//show the cross. Do not allow the booking to be made
$(''#loadingSML''+thisVariationID).hide();
$(''#cross''+thisVariationID).hide();
$(''#unableToReserveError'').slideDown();
//disable the form
$(''#OrderForm_OrderForm input'').attr(''disabled'',''disabled'');
}
},
error: function(data){
alert(''error'');
}
})
En ciertas circunstancias traerá de vuelta un error 500 en la forma de:
jQuery17205593111887289146_1338951277057({"message":"Availability exhausted","status":500});
Sin embargo, esto sigue siendo útil para mí y necesito poder manejarlo correctamente.
Sin embargo, por alguna razón, cuando se devuelve este error 500, no se llama a mi función de error y acabo de recibir un error "NetworkError: 500 Internal Server Error" en firebug.
¿Cómo puedo manejar esto?
¿ statuscode
devolución de llamada de statuscode
como
$.ajax({
statusCode: {
500: function() {
alert("Script exhausted");
}
}
});
Creo que podrías atraparlo agregando esto:
$.ajax({
statusCode: {
500: function() {
alert("error");
}
},
url:jSONurl+''?orderID=''+thisOrderID+''&variationID=''+thisVariationID+''&quantity=''+thisQuantity+''&callback=?'',
async: false,
type: ''POST'',
dataType: ''json'',
success: function(data) {
if (data.response == ''success''){
//show the tick. allow the booking to go through
$(''#loadingSML''+thisVariationID).hide();
$(''#tick''+thisVariationID).show();
}else{
//show the cross. Do not allow the booking to be made
$(''#loadingSML''+thisVariationID).hide();
$(''#cross''+thisVariationID).hide();
$(''#unableToReserveError'').slideDown();
//disable the form
$(''#OrderForm_OrderForm input'').attr(''disabled'',''disabled'');
}
},
error: function(data){
alert(''error'');
}
})
Echa un vistazo a los documentos de objetos jqXHR . Podría usar el método de falla para capturar cualquier error.
Algo como lo siguiente para tu caso:
$.post(jSONurl+''?orderID=''+thisOrderID+''&variationID=''+thisVariationID+''&quantity=''+thisQuantity+''&callback=?'')
.done(function(data){
if (data.response == ''success''){
//show the tick. allow the booking to go through
$(''#loadingSML''+thisVariationID).hide();
$(''#tick''+thisVariationID).show();
}else{
//show the cross. Do not allow the booking to be made
$(''#loadingSML''+thisVariationID).hide();
$(''#cross''+thisVariationID).hide();
$(''#unableToReserveError'').slideDown();
//disable the form
$(''#OrderForm_OrderForm input'').attr(''disabled'',''disabled'');
}
}, "json")
.fail(function(jqXHR, textStatus, errorThrown){
alert("Got some error: " + errorThrown);
});
También me gustaría pasar una cadena de datos json por correo postal en lugar de adjuntar variables de consulta:
$.post(jSONurl, $.toJSON({orderID: thisOrderID, variationID: thisVariationID, quantity: thisQuantity, callback: false}))
Eliminé el dataType: json de la llamada ajax y pude detectar el error. En estas situaciones no necesito el contenido del jSON devuelto afortunadamente; solo para saber que se está devolviendo un error, por lo que esto será suficiente por ahora. Firebug todavía tiene un ajuste sibilante, pero al menos puedo realizar algunas acciones cuando hay un error
$.ajax({
url:''http://example.com/jsonservice/LiftieWeb/reserve?token=62e52d30e1aa70831c3f09780e8593f8&orderID=''+thisOrderID+''&variationID=''+reserveList+''&quantity=''+thisQuantity+''&callback=?'',
type: ''POST'',
success: function(data) {
if (data.response == ''Success''){
//show the tick. allow the booking to go through
$(''#loadingSML''+thisVariationID).hide();
$(''#tick''+thisVariationID).show();
}else{
//show the cross. Do not allow the booking to be made
$(''#loadingSML''+thisVariationID).hide();
$(''#cross''+thisVariationID).hide();
$(''#unableToReserveError'').slideDown();
//disable the form
$(''#OrderForm_OrderForm input'').attr(''disabled'',''disabled'');
}
},
error: function(data){
alert(''error'');
}
})
Si estás usando POST puedes usar algo como esto:
$.post(''account/check-notifications'')
.done(function(data) {
// success function
})
.fail(function(jqXHR){
if(jqXHR.status==500 || jqXHR.status==0){
// internal server error or internet connection broke
}
});