asp.net Knockoutjs在提交之前异步调用JS库

时间:2016-10-12 15:30:26

标签: jquery asp.net knockout.js

我在旧的asp.net webapplication中使用Knockoutjs。我要求在asp.net提交按钮单击,我必须调用JS库异步并获得响应,然后发布asp.net提交 (即启动asp.net按钮点击事件)?

Knockoutjs中有没有办法等待来自异步调用的响应然后提交?问题我有,因为asp.net是同步的,当我进行异步调用时 JS库在我收到JS库的响应之前就已经提交了表单。

self.onButtonClick = function () {

    var jsdatatosubmit = {
        param1: '123',
        param2: '123qwewe'
    };
    object.functionTest(jsdatatosubmit)
    .success(

        function (response) {

            return true; //Submit asp.net form Call submit click event
        }   
    )
    .error();

    return false; //instead of true         

};

1 个答案:

答案 0 :(得分:0)

你的问题有2个部分。

  1. 阻止点击按钮提交表单。
  2. 提交同步请求
  3. 您已经拥有的代码应足以满足1(返回false)。你不需要在成功回调中返回true(事实上,这将永远不会发生,因为onButtonClick回调不会等待异步调用在返回之前执行)。至于2,您可以使用ko.utils.postJson或许多其他能够同步发布的库。

    Here是淘汰赛创作者的博客,有一些例子。 Here是我所做的一个jsfiddle,它显示了一个使用它的简单示例。

    <form method="POST">
      <input type="text" data-bind="textInput: someProperty">
      <button type="submit" data-bind="click: submit">submit</button>
    </form>
    
    var viewModel = {
      someProperty: ko.observable('some text'),
      submit: function(e) {
        ko.utils.postJson('/controller/action', { nameOfActionMethodArgument: this.someProperty });
        return false;
      }
    };
    
    ko.applyBindings(viewModel, document.querySelector('form'));