Javascript Ajax表单begin和success处理程序在每次提交时被连续多次调用
我的表单有OnBegin和OnSuccess处理程序,如下所示。我第一次提交时,它工作得很好。我第二次提交OnBegin和OnSuccess时会调用两次。第三次调用事件处理程序三次,依此类推Javascript Ajax表单begin和success处理程序在每次提交时被连续多次调用,javascript,jquery,asp.net-mvc-5,asp.net-ajax,Javascript,Jquery,Asp.net Mvc 5,Asp.net Ajax,我的表单有OnBegin和OnSuccess处理程序,如下所示。我第一次提交时,它工作得很好。我第二次提交OnBegin和OnSuccess时会调用两次。第三次调用事件处理程序三次,依此类推 @using (Ajax.BeginForm("SaveTaxpayer", "Taxpayer", null, new AjaxOptions { HttpMethod = "Post", OnBegin = "SaveTaxpayerBegin", OnSuccess = "SaveTa
@using (Ajax.BeginForm("SaveTaxpayer", "Taxpayer",
null,
new AjaxOptions { HttpMethod = "Post", OnBegin = "SaveTaxpayerBegin", OnSuccess = "SaveTaxpayerSuccess", OnFailure = "radarApp.formSubmitFailure" },
new { id="tpForm", style = "form-horizontal" }))
{...}
我在SO上发现了几篇描述类似问题的帖子,结果证明开发人员多次以不引人注目的方式加载jquery。我没有多次加载jquery。我相信如果我是事件处理程序,每次都会触发两次。我只在布局页面中加载jQuery,该页面只调用一次
我还发现了一个回复者建议的帖子
$("#myform").unbind('submit');
当置于OnBegin、OnSuccess或两者中时,这对我不起作用
有几张海报也遇到了类似的问题,并通过“局部视图”与“局部视图”的对比解决了这个问题。我正在返回一个Json对象,所以我认为这也不是我的问题
我已从窗体事件处理程序中删除所有代码以进行调试:
function SaveTaxpayerBegin() {
debugger;
}
function SaveTaxpayerSuccess(response) {
debugger;
$.get(response.RedirectURL, function (data) { $('#content').empty().html(data); }, 'html');
}
我的控制器返回一个简单的Json对象,其字符串属性应该是不言而喻的:RedirectURL
“#content”是index.cshtml中的一个div,它是我的单页应用程序中所有部分页面的内容div。承载我的表单的页面使用相同的$调用。get。。。您可以在上面的SaveTaxpayerSuccess函数中看到。这就是为什么这个问题让我如此困惑。每次加载我的页面时,content div都会完全消失。似乎jquery或某个javascript类保留了表单提交事件处理程序
另外请注意,我正在我的$.get success处理程序(以及加载表单的页面)中调用.empty()。.empty()的jquery文档说:“为了避免内存泄漏,jquery在删除子元素之前会从子元素中删除其他结构,如数据和事件处理程序。”这似乎没有发生 您已经添加了三次jquery.unobtrusive-ajax.js。这也发生在我身上
签入bundle config“~/ui/js/jquery.unobtrusive.”并在页面中再次添加jquery.unobtrusive-ajax.js单击#tpForm时,是否可以取消对#tpForm的单击绑定,然后返回true?应该让你通过并在途中清除它。@mwwallace8不确定你所说的点击是什么意思。我有两个类型为“提交”的输入,它们没有单击处理程序。@mwwallace8您在我脑海中想了一个主意,所以我命名了提交按钮,然后尝试了$(“#btn1”).unbind();清除事件处理程序,但它不起作用。谢谢你给我指出了那个方向。是的,这就是我的意思。。我想我误解了你最初的处境。在某个时刻,这些被点击的按钮会触发ajax。。我想玩一下它们的捆绑可能会有所帮助。祝你好运