Javascript Ajax操作在MVC部分中递增,这是为什么?
我正在处理一个应用程序中的一些bug,并注意到一些有趣的行为。我在一个只包含一个Ajax.BeginForm的页面上有一个局部视图。在应用程序中的某一点上,我想在ajax操作完成后立即调用一个操作,因此我继续调用Javascript Ajax操作在MVC部分中递增,这是为什么?,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我正在处理一个应用程序中的一些bug,并注意到一些有趣的行为。我在一个只包含一个Ajax.BeginForm的页面上有一个局部视图。在应用程序中的某一点上,我想在ajax操作完成后立即调用一个操作,因此我继续调用 $(document).ajaxComplete(function () { // Do task here }); 然而,我注意到在随后的ajax调用中,ajaxComplete被调用了多次。因此,我设置了一个测试用例,试图重现错误。在主视图中设置后 $(document)
$(document).ajaxComplete(function () {
// Do task here
});
然而,我注意到在随后的ajax调用中,ajaxComplete被调用了多次。因此,我设置了一个测试用例,试图重现错误。在主视图中设置后
$(document).ready(function () {
var counter = 0;
$(document).ajaxComplete(function () {
console.log("Main View : " + (++counter));
});
});
$(document).ready(function () {
var counter = 0;
$(document).ajaxComplete(function () {
console.log("Partial View : " + (++counter));
});
});
在局部视图中,这一点
$(document).ready(function () {
var counter = 0;
$(document).ajaxComplete(function () {
console.log("Main View : " + (++counter));
});
});
$(document).ready(function () {
var counter = 0;
$(document).ajaxComplete(function () {
console.log("Partial View : " + (++counter));
});
});
我在多次通话中得到了这个控制台输出
// Ajax.BeginForm Submit action 1
Main View : 1
Partial View : 1
// Ajax.BeginForm Submit action 2
Main View : 2
Partial View : 2
Partial View : 1
// Ajax.BeginForm Submit action 3
Main View : 3
Partial View : 3
Partial View : 2
Partial View : 1
// Ajax.BeginForm Submit action 4
Main View : 4
Partial View : 4
Partial View : 3
Partial View : 2
Partial View : 1
我不明白为什么会这样。我的Ajax开始表单在我的部分代码中多次触发,还是只是我正在为Ajax创建重复的侦听器?我担心这可能会对我的应用程序中的其他位置产生影响。因为您正在为部分视图中的
ajaxComplete
事件注册新回调。因此,每当您提交返回此部分视图的表单时,此代码将被一次又一次地注册!这就是您多次看到来自部分视图的日志消息的原因
您应该在主视图中只注册一次
ajaxComplete
,以便只执行一次。阅读有关该函数的文档,它将解释何时调用该函数以及应该使用什么=]我怀疑可能会出现类似情况,但最终无法确定。那么我可以把AjaxBegin放在部分中吗?或者我只需要确保任何脚本侦听器都放置在主视图中吗?您应该保留绑定到主视图中加载的脚本中任何事件的代码(仅一次)