JQuery statusCode 404 - 如何获取jqXhr url?

时间:2012-07-13 08:55:22

标签: jquery ajax

我有一个jquery ajax状态代码函数来处理404 ...另一个Stack Overflow应答表明在success方法中,this.url给出了请求的url ...但是,这似乎不是我的statusCode处理程序的情况。有任何想法吗?我在文档中没有看到如何获取请求的URL。

我的ajax选项对象看起来大致如此(在修剪与此问题无关的代码时可能错过了大括号)

;(function($) {
    var defaultSettings = {
     // ... other plugin specific settings
    ajaxOptions:
    {
                    cache:false,
                    context:$(this),
                    statusCode: {
                        404:function(xhr) {

                      // this line...  this.url is always undefined  (so is xhr.url)
                            $('#body').append('<div class="errordisplay">Content not found' + (this.url?': ' + this.url:'') + '</div>');

                    // ... do other stuff

                            return false;

                        }
                    }
            }
}

2 个答案:

答案 0 :(得分:31)

您可以修改请求&amp;使用以下代码发送之前设置对象:

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

然后访问xhr.url回调中的statusCode。它应该工作。

答案 1 :(得分:9)

AJAX事件处理程序的默认上下文(即处理程序中绑定到this的对象)确实暴露了url属性,因为它是$.ajaxSettings与传递给的参数之间的混合$.ajax()

但是,在您的情况下,您通过在$(this)选项中传递context来覆盖该默认上下文。此外,在ajaxOptions中执行此操作意味着使用当前URL扩展该对象并不容易。

我建议在使用data()或类似内容之前,将URL与您的插件在AJAX调用之前增强的元素相关联。