JavaScript — поля формы очищаются на данных POST с привязкой нокаута

Я работаю с PHP на бэкэнде с микрорамкой Slim, если это будет актуально.

Ну, проблема в том, что форма очищается после отправки. Сервер возвращает код ошибки, в случае ошибки, конечно, и сообщение об ошибке показывается пользователю, но поля чистые.

Я должен упомянуть, что я использую плагин jquery-validation.

HTML

<form action="{{ path_for('save_data') }}" method="POST" id="myForm" name="myForm" data-bind="submit: sendForm">
<input type="text" name="foo" data-bind="value: foo" required>
<button type="submit">Save data</button>
</form>

Javascript / Knockout JS

function MyView($) {
var self = this;

self.foo = ko.observable();

/* ... code ... */

self.sendForm = function(theForm) {
if (!$(theForm).valid()) {
return;
}

$.post(theForm.action, ko.toJS(self.foo), function(response) {
alert(response);
})
.fail(function(failResponse) {
alert(failResponse);
});
};
}

ko.applyBindigs(new MyView(jQuery));

Просто для лучшего понимания серверный код выглядит примерно так:

public function postSaveData($request, $response) {
if (TRUE) { // Some validations here
return $response->withJson("Error message", 400);
}
// save
return $response->withJson("OK", 200);
}

ОБНОВИТЬ

После некоторых тестов мне приходит в голову тестировать с чистым кодом javascript, без jQuery. Вроде как:

self.sendForm = function(theForm) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log("Response text: ", xhttp.responseText);
}
else if (this.status == 400) {
console.log("Response text: ", xhttp.responseText);
}
};
xhttp.open("POST", formElement.action, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send(ko.toJS(self.imovel));
};

И вуаля! Форма отлично заполнена, как и прежде, чем отправлять данные. Каким-то образом пост jQuery очищает форму.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector