Javascript 在回调函数中访问jQuery Ajax请求的URL
在使用jQuery执行Ajax请求时,有没有一种方法可以查看请求的URL e、 gJavascript 在回调函数中访问jQuery Ajax请求的URL,javascript,jquery,ajax,Javascript,Jquery,Ajax,在使用jQuery执行Ajax请求时,有没有一种方法可以查看请求的URL e、 g var some_data_object={…各种垃圾…} $.get('/someurl.php',some_data_对象,函数(data,textStatus,jqXHR){ var real_url=?#我在文档中也找不到它。也许可以通过“代理”包装器将它添加到jqXHR对象中,如 我还没有测试过,所以你可能需要打电话 $.param()并连接到url。请参阅 用法: var some_data_obje
var some_data_object={…各种垃圾…}
$.get('/someurl.php',some_data_对象,函数(data,textStatus,jqXHR){
var real_url=?#我在文档中也找不到它。也许可以通过“代理”包装器将它添加到jqXHR对象中,如
我还没有测试过,所以你可能需要打电话
$.param()
并连接到url。请参阅
用法:
var some_data_object = { ...all sorts of junk... }
myGet('/someurl.php',some_data_object, function(data, textStatus, jqXHR) {
var real_url = jqXHR.origUrl;
})
在成功方法中设置一个断点,然后观察
this.url
是请求的真实url。以下是一个可能的解决方案:
捕获ajax调用,然后通过实现beforeSend回调函数将其发送到服务器
保存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
}
似乎ajaxSend全局处理程序()在其设置参数中提供了url。您可以在ajaxSend回调中存储从xhr对象到url的映射,然后在成功回调中查找它提供给您的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()对象。使用$.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}
});
仅供参考,作为对airbai评论的补充-我不能在他的回答中发表评论-您可以将自己的数据添加到呼叫中并在回调中检索。这样您就不必解析URL
在这个示例JSONP请求中,我添加了变量user\u id
(使用jQuery 3.2测试):
如果所有其他方法都失败了,您可以从服务器端代码返回它,但我猜有一个更优雅的解决方案。有没有办法在发出实际请求之前找到这个解决方案?@sanz可能值得注意的是,现代浏览器可能会在XHR上崩溃。也就是说,看起来像@Chris正在寻找的解决方案,但对于您需要向用户报告或显示URL。而不是断点,只需console.log(this.URL);
在success
回调中。也适用于错误部分。当您需要使用$确定问题是由哪个URL引起时。ajaxPrefilter
是一个非常好的建议!+1在我看来,这是最好的方法,只需稍作改动。与所有带有错误报告的诡计不同,您只需在beforeSend函数中console.log或提醒URL。效果非常好。
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];
}
});
// 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}
});
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);
});