Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax操作在MVC部分中递增,这是为什么?_Javascript_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript Ajax操作在MVC部分中递增,这是为什么?

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)

我正在处理一个应用程序中的一些bug,并注意到一些有趣的行为。我在一个只包含一个Ajax.BeginForm的页面上有一个局部视图。在应用程序中的某一点上,我想在ajax操作完成后立即调用一个操作,因此我继续调用

$(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放在部分中吗?或者我只需要确保任何脚本侦听器都放置在主视图中吗?您应该保留绑定到主视图中加载的脚本中任何事件的代码(仅一次)