使用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
的一些方法/属性?我在文档中找不到它。
感谢。
答案 0 :(得分:76)
在成功方法中设置断点,然后观察
this.url
是请求的真实网址。
答案 1 :(得分:16)
这是一个可能的解决方案:
在您生成的错误消息中报告。
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
}
答案 2 :(得分:8)
使用$.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}
});
答案 3 :(得分:2)
似乎ajaxSend全局处理程序(http://api.jquery.com/ajaxSend/)在其settings参数中提供了url。您可以存储从xhr对象到ajaxSend回调中的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()对象。
答案 4 :(得分:1)
我也无法在文档中找到它。也许只需通过“代理”包装器将其添加到jqXHR对象,如...
我没有测试过,所以你可能需要打电话
$.param()
并连接到网址。见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;
})
答案 5 :(得分:0)
仅供参考,作为airbai评论的补充 - 我无法在他的回答中发表评论, - 您可以将自己的数据添加到调用中并在回调中检索它。这样您就不必解析URL。
在这个示例JSONP请求中,我添加了变量element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.xpath, addToCartXpath)))
(使用jQuery 3.2测试):
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "fybAddCartEvent")))
element.click()