在callback函数中访问jQuery Ajax请求的URL

有没有一种方法可以查看我使用jQuery执行Ajax请求时请求的URL?

例如,

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 }) 

我如何访问jQuery实际使用的URL? 也许jqHXR某些方法/属性? 我无法在文档中find它。

谢谢。

在成功方法中设置一个断点,然后观察

 this.url 

是请求的真实url。

这是一个可能的解决scheme:

  1. 通过实现beforeSendcallback函数,在发送到服务器之前捕获ajax调用。
  2. 保存url和数据
  3. 在您生成的错误消息中报告。

     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 } 

使用$.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/

看起来像ajaxSend全局处理程序( http://api.jquery.com/ajaxSend/ )提供其设置参数中的url。 你可以在你的ajaxSendcallback函数中存储xhr对象到url的映射,然后在你的成功callback函数中查找它提供给你的xhr对象。

 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]; } }); 

这具有不需要修改每个$ .ajax()对象的优点。

我也无法在文档中find它。 也许只是通过一个“代理”包装将其添加到jqXHR对象…

我没有testing过这个,所以你可能需要调用$.param()和concat到url。 请参阅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); }); } 

用法:

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

仅供参考,作为airbai评论的补充 – 我不能评论他的答案, – 你可以添加自己的数据到调用中,并在callback中检索它。 这样你就不必分析URL。

在这个例子JSONP请求中,我添加了variablesuser_id (用jQuery 3.2testing):

 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); });