2015-04-29 5 views
0

Я немного начинаю, когда дело доходит до звонков AJAX, так извиняюсь заранее, потому что я застрял, и я понятия не имею, почему !Успех AJAX: функция всегда возвращает успех (и код состояния 200), функция ошибки не запускается

Таким образом, у меня есть собственный сервер, на котором отображается страница входа в систему. Используя маршрутизатор, я определяю, правильно ли введены данные в форме для пользователя, чтобы перейти на домашнюю страницу. Моя кнопка входа в систему также связана с AJAX, в которой я добавляю обработчик событий, который на данный момент [должен] отображать окна предупреждений на основе результатов проверки в маршрутизаторе.

Итак, моя проблема показывает правильные поля для каждого ответа. Поле предупреждения «Успешное» всегда отображается, как и код состояния 200. Код ошибки: функция даже не достигнута.

У меня есть файл-маршрутизатор, который обслуживает страницы и обрабатывает журнал регистрации, файл js, содержащий правильные комбинации учетных данных входа в систему, страницу входа в систему html и файл входа в систему js. Я использую javascript и AJAX и google chrome для отладки. Некоторый код, который, я думаю, вам понадобится для этого вопроса, приведен ниже. Спросите, требуется ли вам больше.

Войти регистрация на маршрутизаторе:

app.post('/api/login/', function (req, res) {   
     console.log(req.body); 
     var emailLog = req.body.email; 
     var passwordLog = req.body.password; 
     validUser = false; 

     // Search user data 
     for (var x in USERS.users) { 
     if (emailLog === USERS.users[x].email && passwordLog === USERS.users[x].password) { 
       validUser = true; 
       break; 
      }    

     } 
     if (validUser === true) { 
      console.log("Log in successful"); 
     res.send('Success'); 

     } else {  

     console.log("Incorrect combination"); 
      res.send('Error'); 
     } 

    }); 

Login.js Этот файл реализует материал AJAX:

$(document).ready(function(){ 
    console.log("in doc ready"); 

    $("#submit_button").click(function(e){ 
     console.log("in event handler"); 

    e.preventDefault(); 

    $.ajax({type: "POST", 
      url: "/api/login", 
      data: { email: $("#email").val(),password: $("#password").val() }, 


      success:function(data, textStatus, xhr){ 
      alert("Successful"); 
       console.log(xhr.status); 
       console.log(data); 

     }, 
      error:function(data){ 

     alert("Unsuccessful"); 
//$("#errorMessage").html("Incorrect email or password - Try again"); 

      }  

    }); 
    }); 
}); 

Помощь! Я просмотрел несколько страниц вопросов AJAX здесь, и никто из них не работал для меня. В конечном итоге я хотел бы добавить текст ошибки в div на странице входа в систему, но пока я буду счастлив, просто показывая правильное предупреждение !!! ... Почему он всегда возвращает окно предупреждения о успехе, даже если я ввожу неправильную комбинацию? Любые предложения или указатели для правильного направления для исправления этой ошибки?

Update Это то, что показывает в консоли от инструментов разработчика, как для правильного сочетания и неправильной комбинации:

login.js:2 in doc ready 

login.js:5 in event handler 
login.js:18 200 
login.js:20 Success 

login.js:5 in event handler 
login.js:18 200 
login.js:20 Error 

И это в CMD окно:

Example app listening at http://:::3000 
{ email: '[email protected]', password: 'a' } 
[email protected] 
a 
Valid user : true 
Log in successful 

{ email: '[email protected]', password: 't' } 
[email protected] 
t 
Valid user : false 
Incorrect log in combination - re-directing back to login page 

ответ

1

В условиях AJAX, пока возвращается статус «200», это считается «успехом», и функция ошибки не срабатывает. Это не имеет никакого отношения к тому, что вы отправляете как ответ, это только код статуса http.

так настроить функцию успеха:

 success:function(data, textStatus, xhr){ 

      console.log(xhr.status); 
      console.log(data); 

      if (data == "Success") // thats what you send in case of a proper login 
       alert("Successful") 

    }, 
+0

Благодарим вас за это разъяснение. Я не читал это в документации ajax ... Я, должно быть, пропустил это, не понимая! Я добавил, что это работает! Для добавления окна предупреждения об ошибке мне нужно использовать функцию error: function() или я могу просто использовать оператор else поверх этого if? – hturner

0

Поставьте точку останова на этой линии и убедитесь, что она оказывается хорошо

if (emailLog === USERS.users[x].email && passwordLog === USERS.users[x].password) { 
      validUser = true; 
      break; 
     }  

Эта логика всегда делает validuser истину, которая всегда делает его успех.