2015-01-06 2 views
3

Я использую PHP-скрипт, который возвращает «y» или «n» в зависимости от введенных пользователем данных, который передается через переменные uname и pass. Я использую метод ajax $.get() для вызова сценария php.Javascript не работает с php

Если я попытаюсь вывести данные в методе $.get(), он отлично работает, но дает проблему, когда я использую оператор if для сравнения значения с 'y' или 'n'.

Мой код выглядит this-

var status; 
    $('#login').click(function(){ 
    $.get("login.php", { uname: document.getElementById('uname').value, pass: document.getElementById('pass').value }) 
    .done(function(data) { 
     status=data; 
     alert(status); //This works 
    }); 

    if(status=='y') 
    { 
     alert('yes!'); //This is not working 
     // window.location.replace("welcome.html"); 
    } 
    else if(status=='n') 
    { 
     alert('no!');  //This is not working 
    } 
}); 

Любая помощь будет высоко оценен.

+1

сочетание традиционных JS и jQuery не рекомендуется; вы можете заменить 'document.getElementById ('uname'). value' с' $ ('# uname'). val() ' – Raptor

+0

попытался помещать предупреждения * внутри * обратный вызов' done() '? – Aditya

+0

@ Raptor Обязательно. Изменил это! :) – Pranav

ответ

5

Перемещайте if состояние внутри AJAX-за асинхронной природы Аякса:

var status; 
    $('#login').click(function(){ 
    $.get("login.php", { uname: document.getElementById('uname').value, pass: document.getElementById('pass').value }) 
    .done(function(data) { 
     status=data; 

     if(status=='y') 
     { 
      alert('yes!'); 
     } 
     else if(status=='n') 
     { 
      alert('no!'); 
     }  
    }); 
}); 
+2

Вы должны заменить 'This is not working' с' This is now working'. Ложь комментария ошибка, худшая ошибка! : D – Amadan

+1

@Amadan: lol, комментарии удалены :) – Dev01

+0

Спасибо большое! Не думал об этом! Есть ли способ предотвратить обновление страницы после этого? Кроме того, похоже, что он работает в любое время. (Я предполагаю, что это из-за обновления?) – Pranav

3

Это типичная проблема асинхронной. Вы делаете запрос, сравниваете результат, который еще не возвращался с некоторыми строками, затем приходит ответ на ваш запрос - слишком поздно для него важно. Слишком быстро с вашей проверкой. Поместите свои сравнения состояния внутри обратного вызова done.

1

поскольку Ajax является асинхронным к тому времени вашего код поступает в условном statments код для запроса может не вернулся, следовательно, статус вара может не быть инициализирован еще. Попробуйте вывести команду condicional statments внутри функции сделано, как это:

$('#login').click(function(){ 
$.get("login.php", { uname: document.getElementById('uname').value, pass:  document.getElementById('pass').value }) 
.done(function(data) { 
    if(data =='y') 
    { 
     alert('yes!'); 
     // window.location.replace("welcome.html"); 
    } 
    else if(data =='n') 
    { 
     alert('no!'); 
    } 
}); 

Я думаю, что следует сделать трюк;) ... для дальнейших уточнений вы можете посетить Аякс апите документации JQuery: http://api.jquery.com/jquery.ajax/

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