20

我有一个 ajax 请求,我故意从我的服务器端代码中失败以触发错误处理事件。我想知道是否可以在这里获取它尝试的 URL?我想获取该 URL 并将其注入超链接并重试请求。

这可能吗?

编辑 我可以看到尝试的 URL 请求是通过FireBug并检查了 jqxhr 对象console.dir(),但似乎找不到任何可以帮助我识别它尝试调用的 URL 的东西。理想情况下,不想存储一个全局变量是希望从参数中得到这个。

在此先感谢,O。

$.ajax({
    type: 'get',
    url: 'somewhere/foo',
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false
});

myError = function (jqXhr, textStatus) {
    alert(jqXhr.url); //Get url of failed request and inject it into hyper link?
};
4

4 回答 4

29

将你的保存url在一个变量中。您可以在错误函数中使用它。显然 url 将与 ajax 请求的 url 参数中提供的相同

var url = 'somewhere/foo';

$.ajax({
    type: 'get',
    url: url,
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false,
    error: function(jqXHR, exception) {
       //use url variable here   
    }
});

另一种选择可以是这个

$.ajax({
    type: 'get',
    url: 'https://google.com',
    context: this,
    success: this.mySuccess,
    error: this.myError,
    cache: false,
    beforeSend: function(jqXHR, settings) {
        jqXHR.url = settings.url;
    },
    error: function(jqXHR, exception) {
        alert(jqXHR.url);
    }
});

小提琴

于 2013-09-12T11:45:50.027 回答
15

我相信最简单的方法是:

this.url

this应该绑定到具有 url 属性的ajax 设置对象。

于 2017-09-27T00:02:29.747 回答
0

最简单的方法是通过错误回调上下文的 ajax 设置 ( JQueryAjaxSettings ) 对象访问 url 。

$.ajax({
    type: 'get',   
    url: 'somewhere/foo',    
    error: function() {
        alert(this.url);
    }
});
于 2018-10-23T13:49:46.987 回答
0

添加到@KhawerZeshan 答案。最好全局设置 beforeAjax:

$.ajaxSetup({
    beforeSend: function(jqXHR, settings) {
        jqXHR.url = settings.url;
    }
});

这样,如果您将它与 async await 一起使用:

try {
   await $.get('http://example.com');
} catch(e) {
   console.log(e.url);
}
于 2021-12-25T14:12:58.797 回答