[Javascript] Accéder à l'URL d'une requête jQuery Ajax dans la fonction de rappel


Answers

Voici une solution possible:

  1. Attrapez l'appel ajax avant qu'il ne soit envoyé au serveur en implémentant la fonction de rappel beforeSend.
  2. Enregistrer l'URL et les données
  3. Indiquez-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
    }
Question

Y at-il un moyen que je peux voir l'URL qui a été demandée lorsque je fais une requête 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 réellement utilisée pour faire la demande? Peut-être une méthode / propriété de jqHXR ? Je ne pouvais pas le trouver dans la documentation.

Merci.




Pour info, comme un ajout au commentaire d'Airbai-je ne peux pas commenter dans sa réponse, - vous pouvez ajouter vos propres données à l'appel et le récupérer dans les rappels. De cette façon, vous n'avez pas besoin d'analyser l'URL.

Dans cet exemple, la requête JSONP a ajouté la variable user_id (testée avec jQuery 3.2):

var request = $.ajax({
    dataType: "json",
    url: "http://example.com/user/" + id + "/tasks?callback=?",
    user_id: id,
    success: function(data) {
        console.log('Success!');
        console.log("User ID: " + this.user_id);
    },
    timeout: 2000
}).fail(function() {
    console.log('Fail!');
    console.log("User ID: " + this.user_id);
});



Il semble que le gestionnaire global ajaxSend ( http://api.jquery.com/ajaxSend/ ) fournisse l'URL dans son paramètre settings. Vous pouvez stocker un mappage de l'objet xhr vers l'url de votre rappel ajaxSend, puis dans votre callback réussi, recherchez 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 a l'avantage de ne pas avoir à modifier chaque objet $ .ajax ().