2013-03-05 3 views
0

Мне нужна моя функция, чтобы возвращать FALSE, если пользователь существует, и TRUE, если пользователь не существует в базе данных. Вот мой код функции. Firebug показал мне, что переменный флаг остается неопределенным все время. Как я могу это исправить?Функция jQuery.ajax не возвращает параметр из него

function checkLogin(login, n) { 
     var flag; 

     jQuery.ajax({ 
      type: "POST", 
      url: "${pageContext.request.contextPath}/checkLogin.ajax", 
      data: "login="+login.val(), 

      success: function(response){ 
       if (response.status == "EMPTY") { 
        alert('Login is free - you can take it'); 
        flag = true; 
       } 

       if (response.status == "EXISTS") {    
        alert('Login already exists in Database'); 
        login.addClass("ui-state-error"); 
        updateTips(n); 
        flag = false; 
       } 

      } 
     }); 

     return flag; 
    } 
+1

Где находится казусный канонический дубликат для этого вопроса, который появляется слишком часто? Я хочу отметить это –

+0

см. Http://stackoverflow.com/questions/15155607/use-jquery-ajax-dont-have-callback-when-return-true/15156942#15156942 – Tapirboy

ответ

0

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

Вы можете воспользоваться помощью $ .deferred вместо

look at it

0

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

0

Несколько проблем:

  • ajax будет работать асинхронно, так что вы не можете быть уверены, что она будет завершена (и, следовательно, установить флаг), прежде чем вернуть значение, которое вы ждали его, чтобы установить;
  • и вы не указываете обработчик для параметра error, поэтому, если что-то идет не так, вы не узнаете об этом.
-1

данные Try проводки в data: "login:"+login.val(),

использования: вместо =

, а также попробовать размещение данных с помощью «+ +» «

+0

'name = value' является правильным синтаксисом для параметра POST. –