50 votes

Accéder à l'URL d'une requête Ajax jQuery dans la fonction Callback

Existe-t-il un moyen de voir l'URL qui a été demandée lorsque je fais une demande Ajax avec jQuery ?

Par exemple,

var some_data_object = { ...all sorts of junk... }
$.get('/someurl.php',some_data_object, function(data, textStatus, jqXHR) {
   var real_url = ? # <-- How do I get this
})

Comment puis-je accéder à l'URL que jQuery a effectivement utilisée pour faire la demande ? Peut-être qu'une méthode ou une propriété de jqHXR ? Je ne l'ai pas trouvé dans la documentation.

Gracias.

76voto

airbai Points 1399

Fixez un point de rupture dans la méthode de réussite, puis observez

this.url

est l'url réelle de la demande.

16voto

Dror Points 424

Voici une solution possible :

  1. Attraper l'appel ajax avant il est envoyé au serveur en implémentant la fonction de rappel beforeSend.
  2. Sauvegarder l'url et les données
  3. Signalez-le dans le message d'erreur que vous générez.

    var url = "";
    
    $.ajax({
      url: "/Product/AddInventoryCount",
      data: { productId: productId, trxDate: trxDate, description: description, reference: reference, qtyInCount: qtyInCount }, //encodeURIComponent(productName)
      type: 'POST',
      cache: false,
      beforeSend: function (jqXHR, settings) {
        url = settings.url + "?" + settings.data;
      },
      success: function (r) {
        //Whatever            
      },
      error: function (jqXHR, textStatus, errorThrown) {
        handleError(jqXHR, textStatus, errorThrown, url);
      }
    });
    
    function handleError(jqXHR, textStatus, errorThrown, url) {
       //Whatever
    }

8voto

Chrisbloom7 Points 1386

Utilisation de $.ajaxPrefilter :

// Make sure we can access the original request URL from any jqXHR objects
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
  jqXHR.originalRequestOptions = originalOptions;
});

$.get(
  'http://www.asdf.asdf'
).fail(function(jqXHR){
  console.log(jqXHR.originalRequestOptions);
  // -> Object {url: "http://www.asdf.asdf", type: "get", dataType: undefined, data: undefined, success: undefined}
});

http://api.jquery.com/jQuery.ajaxPrefilter/

2voto

Paul I Points 33

Il semble que le gestionnaire global ajaxSend ( http://api.jquery.com/ajaxSend/ ) fournit l'url dans son paramètre de configuration. Vous pourriez stocker un mappage de l'objet xhr à l'url dans votre callback ajaxSend, puis dans votre callback de succès le rechercher en fonction de l'objet xhr qu'il vous fournit.

var mappings = {};

$.ajaxSend(function(event, xhr, settings) {
   mappings[xhr] = settings.url;
});

$.ajax({
  url: "http://test.com",
  success: function(data, textStatus, xhr) {
    console.log("url = ", mappings[xhr]);
    delete mappings[xhr];
  }
});

Cela présente l'avantage de ne pas devoir modifier chaque objet $.ajax().

1voto

JeremyWeir Points 9424

Je ne l'ai pas trouvé non plus dans la documentation. Peut-être qu'il suffit de l'ajouter à l'objet jqXHR via un wrapper "proxy" comme...

Je ne l'ai pas testé, il se peut donc que vous deviez appeler $.param() et concatène à l'url. Voir http://api.jquery.com/jQuery.param/

var myGet = function(url, data, success) {
    $.get(url, data, function(data, textStatus, jqXHR) {
       jqXHR.origUrl = url; // may need to concat $.param(data) here
       success(data, textStatus, jqXHR);
    });
}

l'usage :

var some_data_object = { ...all sorts of junk... }
myGet('/someurl.php',some_data_object, function(data, textStatus, jqXHR) {
   var real_url = jqXHR.origUrl;
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X