Как разрешить программе ждать результата ajax для продолжения обработки?

#jquery #ajax #callback

#jquery #ajax #обратный вызов

Вопрос:

Я выполняю проверку формы. В функции проверки формы я вызвал ajax-функцию для проверки поля. если возвращаемые данные ajax равны «No», эта функция должна возвращать false. Однако он никогда не ожидает возврата результата ajax. Как я должен справиться с этой проблемой? мой код кнопки:

Код jQuery:

 function Checkform() {
        var result = true;
        $('input:password').each(function() {
            if ($(this).val() == "") {
                $(this).focus();
                $(this).addClass('HighlightBorder');
                alert("Please set password.");
                result = false;
                return false;
            }
        });
        if (!result)
            return false;
......
       $.post(rootPath   "/AjaxPages/SearchAddress.aspx", { "street": street, "city": city, "state": state, "zip": zip, "type": "DPV" }, function(data) {
            if (data == "No") {
                alert("Invalid company address, did you type in a wrong address?");
                result=false;
            } 
        });
        return resu<
}
  

Затем я изменил свой ajax-код на

 $.post(rootPath   "/AjaxPages/SearchAddress.aspx", { "street": street, "city": city, "state": state, "zip": zip, "type": "DPV" }, function(data) {
            if (data == "No") {
                alert("Invalid company address, did you type in a wrong address?");
                return false;
            } else
                return true;
  

Я думаю, что на этот раз возвращаемое значение выполняется после вывода данных, но все равно это не работает.

Комментарии:

1. На этот вопрос легко ответить, но я не буду, пока вы не отформатируете свой код и не поместите его в блок кода. Щелкните {} значок в редакторе.

2. это научит его, Майк

Ответ №1:

ajax является асинхронным, поэтому вам приходится использовать обратные вызовы.

    $.post(rootPath   "/AjaxPages/SearchAddress.aspx", { "street": street, "city": city, "state": state, "zip": zip, "type": "DPV" }, function(data) {
        if (data == "No") {
            alert("Invalid company address, did you type in a wrong address?");
            some_callback_function();//callback
        } 
    });
  

Комментарии:

1. что я должен написать в функции обратного вызова? возвращает false?

2. @steven, ты не можешь выполнять возврат при обратном вызове. просто делайте то, что, по вашему мнению, должно быть сделано в этот момент

3. Но я должен возвращать false, если данные выходят равными «Нет». В противном случае данные формы будут обработаны сервером и перейдут на следующую страницу. Есть идеи?

4. просто всегда return false и если сообщение проходит, отправьте форму ( $('#form_id').submit() )

5. это не html-страница, это aspx-страница. И эта часть кода находится на дочерней странице, встроенной в главную страницу. Знаете ли вы, как установить onclientclick = «true» для кнопки сервера? Я хочу использовать функцию $ (‘#savebtn’).click()