错误 jqxhr 上的 Ajax GET url

Posted

技术标签:

【中文标题】错误 jqxhr 上的 Ajax GET url【英文标题】:Ajax GET url on error jqxhr 【发布时间】:2013-09-16 18:37:16 【问题描述】:

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

这可能吗?

编辑 我可以看到通过FireBug 发出的尝试的URL 请求,并通过console.dir() 检查了jqxhr 对象,似乎找不到任何可以帮助我识别它试图调用的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?
;

【问题讨论】:

你真的试过了吗? 是的,我试过它给了我 undefined 但是萤火虫向我显示了它尝试的 URL,并希望通过 jqxhr 得到它。 确保myError 确实是this.myError。您的代码没有显示它,所以我认为这就是问题所在。 它们可能是上面代码的小问题,但试图简化它。错误处理程序肯定会触发,但 jqxhr url 属性未定义?是否应该使用它尝试的 URL 填充? 【参考方案1】:

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

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

如果你将它与异步等待一起使用,这种方式:

try 
   await $.get('http://example.com');
 catch(e) 
   console.log(e.url);

【讨论】:

【参考方案2】:

我相信最简单的方法是:

this.url

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

【讨论】:

有趣:D。错误处理程序上下文中的this 是什么?由于该函数接受 jqXHR 对象并且该对象没有“this”属性……this 可能是什么?我发现 jQuery 文档在这个低级别上没有太大帮助。 该函数绑定到 ajax 设置对象,这就是错误处理程序上下文中的“this”。通常在 javascript 中,如果在对象上定义了方法,则在执行该方法时会将“this”设置为该对象。这是 javascript 的特性,而不是 Jquery 的特性。它不像 Python 那样明确,您需要将对象传递给它自己的所有方法。更多阅读:medium.com/quick-code/… 这是最好的答案。有数百个 ajax 调用将错误发送到同一个错误处理函数,并且想要快速查找和替换以将其作为新的 Ajax-Url 参数添加到错误处理函数中,以便找出谁是罪魁祸首曾是。谢谢!它有效!【参考方案3】:

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

$.ajax(
    type: 'get',   
    url: 'somewhere/foo',    
    error: function() 
        alert(this.url);
    
);

【讨论】:

【参考方案4】:

将您的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);
    
);

FIDDLE

【讨论】:

Aaaaah 辉煌没想到提前发送会试一试! 很高兴帮助你@DrSchizo :) 谢谢,这也适用于 playframework jsRoutes。 附注:如果您需要在 GET 请求中传递参数,这将不起作用; this.url 工作 (***.com/a/5468718/4183498) 显然 url 将与 ajax 请求的 url 参数中提供的相同 不正确,请求可能包含重定向。

以上是关于错误 jqxhr 上的 Ajax GET url的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中Ajax快捷方法之$.get()

ajax error函数

jquery ajax 将404错误提示给客户端

easyui-datagrid如何通过ajax绑定数据(java)

ajax statusCode 的 jQuery 默认值

ajax大全