2014-02-08 9 views
0

Это действительно должно быть просто. Но код, который я пытаюсь написать, просто не работает, даже после обхода интернета.Javascript игнорирует true и false

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

//Check if it's a valid user 
function checkUser(){ 
status = (function(){ 
    var isOnline = null; 
    $.ajax({ 
     async: false, 
     global: false, 
     type: "POST", 
     url: "./system/checkUser.php", 
     data: $("#webcam").serialize(), 
     success: function(data){ 
      isOnline = (data == "1"); 
     } 
    }); 
    return isOnline; 
})(); 

return status; 
} 

и это, как я пытаюсь использовать его

function loadProfile(){ 
var text = checkUser(); 
alert(text); 

if(text != true){ 
    alert("Invalid user!"); 
    return; 
}else{ 
    //Code 
} 

Но все, что я получаю от CheckUser(), я всегда получаю "Invalid пользователь!" предупреждение, даже если текст верен. Может ли кто-нибудь помочь мне здесь? Я потерялся за слова.

+0

'асинхронной: false' устарела, и, как правило, не работают. – jcarpenter2

+0

@ user2245885 Можете ли вы опубликовать то, что переиздано с вашего php? –

+0

Что получает предупреждение? И что возвращает ваш скрипт? – godfrzero

ответ

3

Начиная с jQuery 1.8, использование async: false с jqXHR ($ .Deferred) устарело; вы должны использовать параметры успеха/ошибки/полного обратного вызова вместо соответствующих методов объекта jqXHR, таких как jqXHR.done() или устаревший jqXHR.success().

http://api.jquery.com/jquery.ajax/


Что вы можете сделать, это:

function checkUser(callback){ 
    $.ajax({ 
     global: false, 
     type: "POST", 
     url: "./system/checkUser.php", 
     data: $("#webcam").serialize(), 
     success: callback 
    }) 
} 

function loadProfile(){ 
    checkUser(function(text){ 
     alert(text); 

     if(text != true){ 
      alert("Invalid user!"); 
      return; 
     }else{ 
      //Code 
     } 
    }); 
} 
+1

Итак? OP * * использует опцию 'success', а не обещание. –

1

async: false устарела, так что вы должны использовать функцию обратного вызова для доступа к данным из АЯКС запроса.

Вы можете изменить свою функцию checkUser так, чтобы она имела успешный обратный вызов в качестве параметра.

лично я не люблю использовать большие обратные вызовы, поэтому я обычно обойти проблему с $ .Deferred:

function checkUser() { 

    status = $.Deferred(); 

    $.ajax({ 
     global: false, 
     type: "POST", 
     url: "./system/checkUser.php", 
     data: $("#webcam").serialize(), 
     success: function(data) { 
      status.resolve(data == "1"); 
     } 
    }); 

    return status; 
} 

function loadProfile() { 

    var textD = checkUser(); 

    textD.done(function (text) { 
     alert(text); 

     if(text != true){ 
      alert("Invalid user!"); 
     } 
    }); 
} 
+2

Вместо использования собственного отложенного объекта вы можете сделать 'return $ .ajax (...). Then (function (data) {return data ==" 1 ";});' (без опции 'success') , –

+0

О, это намного лучше. Я не знал, что '$ .ajax' вернул обещание. – jcarpenter2

+0

Он делает :) ---- –

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