Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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表单begin和success处理程序在每次提交时被连续多次调用_Javascript_Jquery_Asp.net Mvc 5_Asp.net Ajax - Fatal编程技术网

Javascript Ajax表单begin和success处理程序在每次提交时被连续多次调用

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

我的表单有OnBegin和OnSuccess处理程序,如下所示。我第一次提交时,它工作得很好。我第二次提交OnBegin和OnSuccess时会调用两次。第三次调用事件处理程序三次,依此类推

@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。。我想玩一下它们的捆绑可能会有所帮助。祝你好运