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);})
?但是,如果某些东西不可访问,它将创建一个无限循环。目的何在?