全局ajax错误处理程序和闭包

时间:2012-01-30 00:15:20

标签: javascript jquery closures

我正试图解决与关闭相关的问题。

我使用$(document).ajaxError为jquery设置了一个全局错误处理程序,简化版本为:

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        LogError(settings.url, function() { $.ajax(settings); });
    }
);

LogError是一个记录错误的函数,允许用户重试请求(它调用上例中通过第二个参数传入的函数)。

当只有一个错误时,一切都很好,但是当存在多个错误时,设置始终指向单个对象。我明白这可能是因为:

a)所有对象都通过引用传递 b)我的回调函数是从ajaxerror参数中获取设置,同一个对象可能会被重用用于将来的错误吗?

任何人都可以确认发生了什么,以及我将如何修复它?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是正确的:

$.ajax({
    url: '/some_url',
    success: function(){}
    });
$.ajax({
    url: '/some_other_url',
    success: function(){}
    });
$(document).ajaxError(
    function(event, xhr, settings, exceptionthrown)
    {
       alert(settings.url);
    }
);

输出:/some_url/some_other_url

ps:在警告后添加$.ajax(settings);,它会使用交错/some_url/some_other_url创建无限递归。哪个吃资源...如果你有第二个参数的延迟调用,那么尝试将其写为

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        var sett = settings;
        LogError(settings.url, function() { $.ajax(sett); });
    }
);