Ответ 1
Задайте точку прерывания в методе успеха, затем просмотрите
this.url
- реальный url для запроса.
Есть ли способ увидеть URL-адрес, который был запрошен, когда я делаю запрос Ajax с помощью jQuery?
например.
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
})
Как я могу получить доступ к URL-адресу, который jQuery действительно использовал для выполнения запроса? Возможно, какой-то метод/свойство jqHXR
? Я не смог найти его в документации.
Спасибо.
Задайте точку прерывания в методе успеха, затем просмотрите
this.url
- реальный 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-адрес в параметре параметров. Вы можете сохранить сопоставление от объекта xhr к URL-адресу в обратном вызове ajaxSend, а затем в своем обратном вызове выполнить его с учетом объекта 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().
Я тоже не мог найти его в документах. Возможно, просто добавьте его в объект jqXHR через оболочку "прокси", например...
Я не тестировал это, поэтому вам может потребоваться позвонить
$.param()
и согласовать 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;
})
FYI, как дополнение к комментарию airbai - я не могу прокомментировать его ответ, - вы можете добавить свои собственные данные к вызову и получить его внутри обратных вызовов. Таким образом, вам не нужно анализировать URL-адрес.
В этом примере JSONP-запрос я добавил переменную user_id
(проверенную с помощью 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);
});