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

Javascript 全局ajax错误处理程序和闭包,javascript,jquery,closures,Javascript,Jquery,Closures,我正试图把我的头脑集中在一个与关闭相关的问题上 我已经使用$(document)为jquery设置了一个全局错误处理程序 $(document).ajaxError( function(event, xhr, settings, exceptionthrown) { LogError(settings.url, function() { $.ajax(settings); }); } ); LogError是一个记录错误的函数,允许用户重试请求(在上面的示例中,

我正试图把我的头脑集中在一个与关闭相关的问题上

我已经使用
$(document)为jquery设置了一个全局错误处理程序

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        LogError(settings.url, function() { $.ajax(settings); });
    }
);
LogError
是一个记录错误的函数,允许用户重试请求(在上面的示例中,它调用通过第二个参数传入的函数)

只有一个错误时一切正常,但有多个错误时,设置始终指向单个对象。我理解这可能是因为:

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

有谁能证实发生了什么事,以及我将如何着手解决它

谢谢

正确的方法是:

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

ps:with
$.ajax(设置)
在警报后添加,它会创建一个无限递归,并将
/some\u url
/some\u other\u url
交错。它消耗资源。。。如果第二个参数的调用延迟,那么试着将其写为

$(document).ajaxError(
function(event, xhr, settings, exceptionthrown)
    {
        var sett = settings;
        LogError(settings.url, function() { $.ajax(sett); });
    }
);
这是正确的:

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

ps:with
$.ajax(设置)
在警报后添加,它会创建一个无限递归,并将
/some\u url
/some\u other\u url
交错。它消耗资源。。。如果第二个参数的调用延迟,那么试着将其写为

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

“设置总是指向单个对象”是什么意思?它应该返回ajax调用的设置,但有错误。@Cheery:在回调函数中,设置总是指向同一个对象。如果我有两个ajax错误和两个.ajaxError调用(使用不同的设置.URL),当我使用传递给LogError的回调函数重试调用时,它们都会重试一个URL(即一组设置)。您可能需要显示更多代码。您是否检查了浏览器网络日志中的请求?您可能有一组相同的重复请求。您所说的
设置总是指向单个对象是什么意思?它应该返回ajax调用的设置,但有错误。@Cheery:在回调函数中,设置总是指向同一个对象。如果我有两个ajax错误和两个.ajaxError调用(使用不同的设置.URL),当我使用传递给LogError的回调函数重试调用时,它们都会重试一个URL(即一组设置)。您可能需要显示更多代码。您是否检查了浏览器网络日志中的请求?可能是您有一组相同的重复请求。@Kim Sun wu您的意思是
function(){$.ajax(settings);})
?但是,如果某些东西不可访问,它将创建一个无限循环。目的是什么?@Kim Sun wu你是说
function(){$.ajax(settings);})
?但是,如果某些东西不可访问,它将创建一个无限循环。目的何在?