gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:10:13 25 4
gpt4 key购买 nike

我正在解决我正在开发的应用程序中的一些错误,并注意到一些有趣的行为。我在仅包含一个 Ajax.BeginForm 的页面上有一个部分 View 。在应用程序中的某一时刻,我想在 ajax 操作完成后立即调用一个操作,所以我继续调用,

$(document).ajaxComplete(function () {
// Do task here
});
然而,我注意到在后续的 ajax 调用中 ajaxComplete 被多次调用。因此,我设置了一个测试用例来尝试重现该错误。在 主视图中进行设置后,

$(document).ready(function () {
var counter = 0;

$(document).ajaxComplete(function () {
console.log("Main View : " + (++counter));
});
});

这是部分 View

$(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 begin 表单是否在我的部分中多次触发,或者只是我正在为 ajax Complete 创建重复的监听器?我担心这可能会对我的应用程序中的其他地方产生影响。

最佳答案

因为您正在为部分 View 中的 ajaxComplete 事件注册新的回调。因此,每次您提交返回此部分 View 的表单时,此代码都会被一次又一次注册!这就是您多次从部分 View 中看到日志消息的原因。

您应该仅在主视图中注册 ajaxComplete 一次,以便它仅执行一次。

关于javascript - Ajax 操作在 MVC 部分中递增,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com