2012-07-11 8 views
11

uso el siguiente para coger un acceso no autorizado y forzar una entrada:

$.ajaxSetup({ 
    statusCode: { 
     401: function(){ 
      //do stuff 
     } 
    } 
}); 

Funciona muy bien ... cuando se accede a los recursos en mis servidores (dominio), pero ahora estoy tratando de utilizar los recursos de la API de 3 ª parte a través de llamadas ajax y sus 401 también son atrapadas por esto. Así que, ¿Cómo puede ocurrir ya sea:

  1. reescribir el código anterior para coger sólo de 401 de mi dominio o
  2. crea un $ .ajax() con una excepción al código anterior (utilizar un gestor de errores diferente)

¡Muchas gracias!

Respuesta

12

A través de la experimentación, descubrí la respuesta. $ .ajaxSetup() básicamente establece un valor predeterminado para cualquier solicitud $ .ajax(). Sin embargo, la configuración global puede ser anulado por una solicitud específica de este modo:

$.ajaxSetup({ 
    statusCode: { 
     401: function(){ 
      //this will catch any and all access denied errors 
     } 
    } 
}); 

$.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: someresouceurl, 
    statusCode: { 
     401: function(){ 
      //except this one! 
     } 
    }, 
    success: function(data) { 
    } 
}); 
0

De la API jQuery

If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.

Yo recomiendo buscar en el parámetro jqXHR que se obtiene y ver si se puede limitar la búsqueda a sólo su dominio, pero no sé lo suficiente sobre ese aspecto de jQuery para darte el código exacto.

+0

En su función, intente 'console.log (arguments, this)'. Uno de los objetos puede contener la URL, por lo que solo puede ejecutar la función en sus URL. –

1

Ampliando la respuesta de @ MrOBrian, en su función 401, this se establece en una configuración de objeto que contiene información sobre la petición AJAX. Una de las propiedades es url. Puedes leer esto y verificar si es tu URL o no.

$.ajaxSetup({ 
    statusCode: { 
     401: function(){ 
      var url = this.url; 
      if(url === myurl){ // check if url is yours 
      } 
      else{ 
       // not your URL, do nothing 
       return; 
      } 
     } 
    } 
}); 
Cuestiones relacionadas