2013-07-16 4 views
0

Мой опыт работы в jQuery ограничен, и я искал для ответа, но не могу найти его.jQuery check возвращает undefined

Эта функция возвращает false или true на основе get. Теперь моя проблема в том, что функция «Доступность» не возвращает false или true, если я получу свои данные.

Это код.

function Availability(){ 
    var email = jQuery('#emailRegister').val(); 
     jQuery.get("test.php", {email: email}) 
     .done(function(data) { 
      if(data == 'true'){ 
      jQuery(".warningEmailDuplicate").hide(); 
      return true; 
      }else if(data == 'false'){ 
      jQuery(".warningEmailDuplicate").show(); 
      return false; 
     } 
    }); 
} 
+0

http://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success –

ответ

1

jQuery.get создает запрос AJAX. Они асинхронны. Вы не можете указать return значение от обратного вызова AJAX к вызывающей функции. Функция будет завершена, ничего не возвращая, до завершения HTTP-запроса.

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

function Availability(){ 
    var email = jQuery('#emailRegister').val(); 
     jQuery.get("test.php", {email: email}) 
     .done(function(data) { 
      if(data == 'true'){ 
      jQuery(".warningEmailDuplicate").hide(); 
      AvailabilityResult(true); 
      }else if(data == 'false'){ 
      jQuery(".warningEmailDuplicate").show(); 
      AvailabilityResult(false); 
     } 
    }); 
} 

function AvailabilityResult(available) { 
    // *available* will be true or false 
    // do with this value what you wanted to do with the return value from Availability 
} 
+0

Wonderfull, спасибо за ваше время! – Jeremy

0

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

Когда вы вызываете Availablity(); то вне курса, запрос Ajax get отправляется на test.php, и в то время компилятор ничего не возвращает из вашего метода, а присваивающая переменная кажется неопределенной.

Чтобы предотвратить эту проблему, вам необходимо создать функцию обратного вызова, а не просто вернуть значение. см example with no callback и example with callback

Попробуйте этот код:

function Availability(callback){ 
    var email = jQuery('#emailRegister').val(); 
     jQuery.get("test.php", {email: email}) 
     .done(function(data) { 
      if(data == 'true'){ 
      jQuery(".warningEmailDuplicate").hide(); 
      callback(true); 
      }else if(data == 'false'){ 
      jQuery(".warningEmailDuplicate").show(); 
      callback(false); 
     } 
    }); 
} 
//calling function 
Availablity(function(status){ 
var available = status; 
    alert(available); 
}); 
Смежные вопросы