Возвращение true в функцию из асинхронной функции - PullRequest
2 голосов
/ 24 февраля 2011

Я отправляю форму и получаю JSON в качестве ответа. Моя цель - отправить форму, только если полученное значение json.ok равно true.

$("form").submit(function() {
var _this = $(this);
// send request to server, validate json, if ok return true
$.getJSON("/", ($(this).serialize()), function(json) {
    if (json.ok == true) {
        return true;
    }
});
return false;
});

Я знаю, что это не сработает, потому что возвращаемое значение false уже сработало до запуска асинхронного обратного вызова функции getJSON, но я пытаюсь найти способ сделать это. Я уже пытался присвоить возвращаемое значение переменной var и вернуть эту переменную в mainfunction, но всегда существует проблема асинхронной функции, которую mainfunction не ожидает.

Знаете ли вы о хорошем способе сделать эту работу?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Вы не можете вернуть true, используя асинхронный вызов.

то, что вам нужно сделать, в основном уже там - проверьте значения, а затем, если все в порядке, вместо «вернуть истину», вы просто отправляете форму снова.

вам может потребоваться отменить привязку события onsubmit перед его отправкой.

попробуйте заменить "return true"; с "_this.unbind ('submit'). submit ();"

0 голосов
/ 24 февраля 2011

То, что вы хотите сделать, это использовать функцию обратного вызова для выполнения отправки.

// send request to server, validate json, if ok return true
$.getJSON("/", ($(this).serialize()), function(json) {
    if (json.ok == true) {
        $("form").submit();
    }
});  
...