我在旧的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
};
答案 0 :(得分:0)
你的问题有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'));