2014-04-01 2 views
1

Я использую вызов ajax для проверки некоторой проверки, а затем отправки формы обычно с помощью html. В моем аякс-звонкеКак разорвать выполнение и отобразить ошибку внутри успеха ajax?

function checkId() { 
    var str = $("#formObj").serialize(); 
    $.ajax({ 
     type : "post", 
     data : str, 
     url : "checkForId.mt", 
     async : false, 
     success : function(txt) { 
      if (txt == "pass") { 
       return "true"; 
      } else if (txt == "same") { 
       $("#errorMsgIdSame").removeClass("hidden"); 
       return "false"; 
      } 
     }, 
     error : function() { 
      alert("Error"); 
     } 
    }); 
} 

Если элемент управления переходит на «проход», выполнение должно продолжаться. Если он переходит к «тому же», выполнение должно прекратиться. Я называю этот метод ajax другим методом.

function validateForm() { 
    var isValid = true; 
    isValid = checkId(); 
    if (!isValid) { 
     $("#errorMsg").removeClass("hidden"); 
    } 
    return isValid; 
} 

Эта функция validatioForm вызывается при нажатии кнопки. Теперь работает ajax-код, но метод validateForm не возвращает метод ajax.

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

ответ

2

Если я правильно понял ваш вопрос, вы хотите вернуть результат внутренней функции из внешней функции. Это определение checkId делает именно это.

function checkId() { 
    var result; 
    var str = $("#formObj").serialize(); 
    $.ajax({ 
    type : "post", 
    data : str, 
    url : "checkForId.mt", 
    async : false, 
    success : function(txt) { 
     if (txt == "pass") { 
     result = true; 
     return; 
     } else if (txt == "same") { 
     $("#errorMsgIdSame").removeClass("hidden"); 
     result = false; 
     return; 
     } 
    }, 
    error : function() { 
     alert("Error"); 
    } 
    }); 
    return result; 
} 
+0

функция validateForm() { вар IsValid = истина ; isValid = checkId(); <<<<< --------------- if (! IsValid) { $ ("# errorMsg"). RemoveClass ("hidden"); } возвращение isValid; } Я не получаю никакого значения в отмеченной выше строке. Если я напечатаю его в alert(), я получаю undefined. checkId() ничего не возвращает при вызове. Но выполнение выполняется в checkId(). – romhail

+0

@romhail Можете ли вы поставить 'console.log (txt)', в начале функции 'success', и проверить, какой результат вы получаете? – sabof

+0

возвращается «undefined» – romhail

1

Ajax-вызов асинхронный.

Когда вы вызываете ajax, происходит то, что ajax запускает новый поток для выполнения своей задачи - сообщения в вашем случае.

После этого код, который называется ajax, продолжает двигаться.

Когда задача, выполняемая вызовом ajax, возвращает, она выполняет то, что когда-либо было в его сеансах прохода или отказа, в зависимости от состояния задачи.

Итак, в основном ваш метод checkId завершается и возвращается до завершения ajax.

Я бы рекомендовал запуск все, что нужно возвращаемое значение из раздела успеха или не раздел, как это:

success : function(txt) { 
    if (txt == "pass") { 
    newfunction(true); 
    } else if (txt == "same") { 
    $("#errorMsgIdSame").removeClass("hidden"); 
    newfunction(false); 
    } 
}, 

Edit:

function newfunction(passFail) 
{ 
    //Do something with variable passFail 
} 
+0

Это синхронный вызов, если вы указываете 'async: false' – sabof

+0

Ya, это нормально, и я могу вызвать новый метод. Но мне нужно вернуться к старому методу, который вызывает этот метод ajax. – romhail

Смежные вопросы