【问题标题】:knockoutJS - ajax form submitting twiceknockoutJS - ajax 表单提交两次
【发布时间】:2013-05-20 05:29:55
【问题描述】:

我有一个要提交两次的表单。

我查看了类似的与 jQuery 相关的问题 herehere 以及 google 群组 here,但未能找到解决方案。

由于我是 Knockout.js 的新手,也许我遗漏了一些明显的东西?我想了解为什么会这样。这是我所拥有的:

形式:

<form data-bind="submit: Save">
 <div class="span11">
@foreach (var prop in ViewData.ModelMetadata.Properties)
{      
  @Html.Label(prop.PropertyName, new { @class = "attribute-label" })
  @Html.TextBox(prop.PropertyName, "", new { data_bind = "value: " + prop.PropertyName + "" })

}

</div>
<br />
<button type="submit" class="btn" data-bind="enable: IsEnabled">Update                    
</button>
</form>

视图模型:

var viewModel = @Html.Raw(Json.Encode(Model));

viewModel.Save = function() {            

        $.ajax({
            url: '@Url.Action("UpdateEmployee")',
            contentType: 'application/json; charset=utf-8',
            type: "POST",
            data: ko.toJSON({ employee: viewModel }),

            success: function(result) {
                //...

            },

            error: function(xhr, ajaxOptions, thrownError) {
               //...

            }
        });

    };

    $(function() {

        ko.applyBindings(viewModel);

    });

【问题讨论】:

  • 导致 2 个表单提交的事件顺序是什么?

标签: javascript jquery knockout.js form-submit double-submit-problem


【解决方案1】:

鉴于您向我们展示的代码,它没有理由提交两次。可能发生的情况是,您调用了一些其他代码,这些代码显式调用 Save() 函数,这使它看起来提交了两次。

我写了一个小提琴来模仿你所展示的,它没有你描述的同样的问题。

fiddle

【讨论】:

  • 我的错误。就像您提到的那样,这是对 Save() 函数的另一个调用。不幸的是,我在提交问题时错过了它 - 也许它将来仍然可以帮助其他人。我注意到您更改了在小提琴中创建视图模型的方式-您的做法是更好的做法吗?再次感谢您的帮助。
  • 我不会说这是最佳实践,它只是更加独立(我已经设置了一些小提琴作为模板,并以这种方式设置它们)。如果您有一个简单的模型,则无需为了遵循严格的模式而使一切复杂化。我想说,做有意义的事,只要它有条理且易于遵循即可。
猜你喜欢
  • 2011-06-17
  • 2015-04-04
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多