查找XMLHttpRequest的URL

时间:2010-06-17 22:24:24

标签: javascript jquery

我有一些使用jQuery执行ajax请求的代码,并处理成功和错误条件。如果出错,我想知道我调用的URL是什么,所以我可以记录它。此信息似乎包含在XMLHttpRequest.channel中,但是firefox正在抱怨访问它 -

Permission denied for <http://localhost:8081> to get property XMLHttpRequest.channel

我如何确定与XMLHttpRequest相关联的URL?掌握这些信息的安全问题是什么?欢呼声,

科林

4 个答案:

答案 0 :(得分:5)

好的 - 抱歉 - 答案就在这里

http://api.jquery.com/ajaxError/

具体来自上面链接的代码 -

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

显示了在发生ajax错误时如何访问请求网址。不解释为什么XMLHttpRequest.channel对象是不行的。无论如何,希望这将有助于其他人遇到类似的问题。

答案 1 :(得分:2)

安全问题是cross domain XHR requests

在FF2中,您曾经可以在about:config中覆盖此内容,另请参阅this blog,尤其是此首选项:

user_pref("capability.policy.default.XMLHttpRequest.channel", "allAccess");

但这在FF3中已经不可能了。并有充分的理由。

请注意XMLHttpRequest.channel是特定于Ge​​cko的,因此在非Gecko浏览器中不起作用。

答案 2 :(得分:1)

好吧,你只需添加它;]

XMLHttpRequest.prototype.baseOpen = XMLHttpRequest.prototype.open; 
XMLHttpRequest.prototype.open = function(method, url, async) { this._url = url; return XMLHttpRequest.prototype.baseOpen.apply(this, arguments); }; 

然后您可以在错误处理程序中请求xhr._url。

PS:对不起,刚刚发现这个帖子已经老了。

答案 3 :(得分:0)

Firebug使用显示所用URI的跟踪来显示此错误。