Ваш вопрос состоит из двух частей.
- запретить отправку формы при нажатии кнопки.
- отправить синхронный запрос
Код, который у вас уже есть, должен быть достаточным для удовлетворения 1 (возврат false). Вам не нужно возвращать истину внутри обратного вызова успеха (на самом деле этого никогда не произойдет, так как обратный вызов onButtonClick не будет ждать вызова асинхронного вызова перед возвратом). Что касается 2, вы можете использовать ko.utils.postJson или множество других библиотек, способных к синхронным сообщениям.
Вот блог создателя нокаута, который имеет несколько примеров. Вот 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'));