2016-10-12 24 views
0

我在舊的asp.net web應用程序中使用Knockoutjs。我有要求,在asp.net提交按鈕點擊,我必須調用JS庫異步和獲得響應,然後張貼asp.net提交 (即啓動asp.net按鈕點擊事件)?asp.net Knockoutjs在提交之前異步調用JS庫

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   

}; 

回答

0

您的問題有2個部分。

  1. 防止單擊按鈕時提交表單。
  2. 提交同步請求

你已經有應足以滿足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')); 
+0

你介意分享更多關於ko.utils.postJson或許多其他庫的信息?只是不知道該怎麼做! –