2011-01-14 18 views
13

¿Cómo se detecta el error del servidor o la página 404 no encontrada, cuando se usa $ .get o $ .post?

Por ejemplo:

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}); 

que va a hacer absolutamente nada si hay un error de servidor de carga "/ myhandler", o si no se encuentra.

¿Cómo se lo notifica si hay un error?

Respuesta

20

uso error manejador de $.ajax()

$.ajax({ 
    url: "/myhandler", 
    data: {value: 1}, 
    type: 'post', 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText); 
    }, 
    success: function(data){} 
}); 

demo

+6

Así es que esto no es posible con $ .get ? –

+0

Ídem, ¿se puede hacer algo similar para la carga()? –

+1

@OldGeezer puedes hacer algo similar, lee esto http://api.jquery.com/load/ – Reigel

5

Las otras respuestas están muy bien y todo, pero hay soluciones alternativas, a saber .ajaxSetup, .ajaxError y otros controladores de eventos Ajax (cheque la página ajaxSetup doc para obtener más información sobre el resto).

Por ejemplo, con .ajaxError se puede configurar un controlador global de todos sus errores ajax de .post, .get, .getJSON y .ajax para un conjunto específico de elementos.

$(selector).ajaxError(function(event, xhr, ajaxOptions, errorThrown) { 
    // handle ajax error here 
}); 
33

que podría hacer

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}).fail(function(){ 
    // Handle error here 
}); 

fallan se llamará, si tener un error

+5

+1 para la función de falla. hace el trabajo! Se puede utilizar la siguiente manera: .fail (function (e) { \t si (e.status == 404) {// ... \t} \t else {// ... \t } }); – sladda

+0

El código anterior con .error() no captaba nada. Simplemente cambiarlo a fail() hizo el truco. –

1

Trate de usar $.ajaxSetup(), stausCode opción

$.ajaxSetup({ 
    statusCode : { 
    // called on `$.get()` , `$.post()`, `$.ajax()` 
    // when response status code is `404` 
    404 : function (jqxhr, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
      } 
    } 
}); 

// $.get("/path/to/url/"); 
// $.post("/path/to/url/"); 
// $.ajax({url:"/path/to/url/"}) 
Cuestiones relacionadas