2015-12-07 1 views
0

У меня есть эта функция, звоню из другой функцииСделать возвращаемую функцию лжи в зависимости от ответа AJAX

function CheckForSession() { 
     var str="chksession=true"; 

     jQuery.ajax({ 
       type: "POST", 
       url: "chk_session.php", 
       data: str, 
       cache: false, 
       success: function(res){ 
        if(res == "0") { 
         alert('Your session has been expired!'); 
        } 
       } 
     }); 
} 

Как я могу сделать все функции CheckForSession возвращает ложь, если ответ равен 0?

P.S. В моей заявке ответ на эту функцию может быть только 1 или 0.

+0

вы не можете, так как jQuery.ajax асинхронный ... люди скажут вам установить 'асинхронной: false' - но это гораздо лучше, чтобы узнать как написать код, который правильно использует асинхронное поведение –

+0

Вы должны использовать собственные коды состояния http. любая возвращенная ошибка заставит jquery запустить событие ошибки, где вы сможете обрабатывать 403. Это должна быть стандартная практика для проверки любого запроса ajax в вашем приложении. 'header (« HTTP/1.0 403 Unauthorized »);' – synthet1c

+0

Вы можете передать обратный вызов fn на CheckForSession и в случае успеха/ошибки ajax вы можете решить позвонить или не позвонить – joyBlanks

ответ

3

Вы не можете сделать это из-за асинхронного запроса AJAX.

Лучшее решение для вас использовать promises:

function CheckForSession() { 
    var str="chksession=true"; 

    return jQuery.ajax({ 
      type: "POST", 
      url: "chk_session.php", 
      data: str, 
      cache: false, 
      success: function(res){ 
       blabla = res; 
       if(res == "0") { 
        alert('Your session has been expired!'); 
       } 
      } 
    }); 
} 

CheckForSession().then(function(data) { 
    // successful 
}, function() { 
    // error 
}) 

jQuery.ajax по умолчанию возвращает объект пообещать, и я разрешен, когда Ajax запрос будет завершен. После этого вы можете написать свои действия в зависимости от результата

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

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