8

我有一个 jquery ajax statuscode 函数来处理 404 ...另一个 Stack Overflow 答案指出,在成功方法中,this.url 给出了请求的 url ...但是,我的情况似乎并非如此状态码处理程序。有任何想法吗?关于如何获取请求的 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;

                        }
                    }
            }
}
4

2 回答 2

32

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

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

然后xhr.urlstatusCode回调中访问。它应该工作。

于 2012-08-16T03:37:39.083 回答
9

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

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

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

于 2012-07-13T09:19:30.193 回答