错误 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的主要内容,如果未能解决你的问题,请参考以下文章