在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:
- 通过实现beforeSendcallback函数,在发送到服务器之前捕获ajax调用。
- 保存url和数据
-
在您生成的错误消息中报告。
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} });
看起来像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); });