получить значение из ответа jquery ajax без установки async false

Я использую плагин формы jquery для отправки данных на сервер. Перед отправкой я запускаю проверку на стороне сервера через ajax. так что структура

function validateForm(formData, jqForm, options){
   var check = true; //have to set check to false to avoid form submit

   ....
   looping through form elements and putting values in to data array here
   ....

   function sendData(callback){

      $.ajax({
         url:'validate.php',
         data:data,
         dataType:'json',
         //async:false,  if I uncomment this, code works as I want
         success:callback
      });

   }

   function processForm(response){
      $.each(response,function(i,res){
        //if validation is fail I'm setting check = false here
      });
   }

   sendData(processForm);

   return check;

})

Поскольку я видел, что установка async на false не является хорошей практикой, как я могу установить значение проверки на false с помощью обратных вызовов?


person ThilinaG    schedule 15.05.2011    source источник


Ответы (2)


Не пытайтесь вернуть данные. Выполняйте любую работу внутри обратного вызова (или в функциях, которые вы вызываете из него).

person Quentin    schedule 15.05.2011
comment
Замените //если проверка не удалась, я устанавливаю здесь check = false на Делать все, что хотите, если проверка ложна - person Quentin; 15.05.2011
comment
Мне нужно вернуть false из этой функции, если проверка не пройдена, поэтому плагин формы jquery блокирует отправку. - person ThilinaG; 15.05.2011
comment
Вы должны вернуть false в любом случае, а затем перезапустить, если запрос возвращается с OK. Хотя это кажется довольно бессмысленным — использование JS для проверки экономит время пользователя, избегая обращения к серверу. Если вы собираетесь добавить дополнительный сервер туда и обратно, то вы будете более продуктивны. - person Quentin; 15.05.2011

Вы видели функцию jQuery .submit()? Вы можете отменить отправку в случае сбоя проверки, вызвав .preventDefault().

Пример jQuery:

<script>

$("form").submit(function() {
  if ($("input:first").val() == "correct") {
    $("span").text("Validated...").show();
    return true;
  }
  $("span").text("Not valid!").show().fadeOut(1000);
  return false;
});

</script>

Вы можете выполнить проверку и отправку в два этапа: сначала проверить, а затем использовать отправку в обработчике OnAJAXSuccess.

person MalcomTucker    schedule 15.05.2011
comment
Я использую плагин формы jQuery для отправки данных. ссылка - person ThilinaG; 15.05.2011