【问题标题】:AJAX success:function always returning success (and 200 status code), error function not triggeringAJAX 成功:函数总是返回成功(和 200 状态码),错误函数未触发
【发布时间】:2015-04-29 13:48:32
【问题描述】:

在 AJAX 调用方面我有点初学者,所以提前道歉,因为我被卡住了,我不知道为什么!

总之,我有自己的服务器,它显示登录页面。使用路由器,我正在确定表单中输入的详细信息是否正确,以便用户继续访问主页。我的登录按钮也链接到 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 中添加错误文本,但现在我会很高兴只显示正确警告!!! ...为什么即使我输入了错误的组合,它总是返回成功警报框?对于修复此错误的正确方向有任何建议或指示吗?

更新 这是开发者工具在控制台中显示的正确组合和错误组合:

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: 'a@a.com', password: 'a' }
a@a.com
a
Valid user : true
Log in successful

{ email: 'a@a.com', password: 't' }
a@a.com
t
Valid user : false
Incorrect log in combination - re-directing back to login page

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案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")
    
         },
    

    【讨论】:

    • 感谢您的澄清。我没有在 ajax 文档中阅读过它......我一定是在没有意识到的情况下跳过了它!我已经添加了它并且它有效!要添加错误警报框,我需要使用 error:function() 还是可以简单地在 if 之上使用 else 语句?
    【解决方案2】:

    在这一行放一个断点,并确保结果正常

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

    这种逻辑总是使validuser 为真,这总是使它成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2018-06-22
      • 2020-04-16
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多