Ajax-为什么我会得到一个错误函数而不是成功?

时间:2017-06-13 07:57:13

标签: javascript jquery html ajax

我不明白为什么我的代码运行错误函数而不是成功。我一直从我的console.log

获得这个

Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}

我想不出有什么理由不执行我的逻辑,所以我尝试在我的错误函数中添加一个重定向,这就是我得到的

Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
基本上发生了同样的事情,所以现在我对编辑windows to window之后我的问题没有真正的了解。 这是我在js中的代码

function login(){
var username = document.getElementById("userID").value;
var password = document.getElementById("Password").value;
var postData = { "userID": username, "Password": password };
var postJSON = JSON.stringify(postData);

$.ajax({
    url: "http://localhost:3000/api/login", // server url
    type: "POST", //POST or GET
    contentType: "application/json",
    data: postJSON, // data to send in ajax format or querystring format
    datatype: "JSON",

    success: function(response) {
        alert('success');
        console.log(response);
        window.location.replace("http://localhost/index.html");
    },
    error: function(response) {
        alert('error');
        console.log(response);
        window.location.replace("http://localhost/index.html");

    }
});
}

这是我的HTML代码。我正在使用onclick。

 <input class="button" type="submit" id="submit" value="Log In" onclick="return login()"/>

我的代码究竟出了什么问题?我试图通过带有post的ajax来调用我的登录api(localhost:3000 / api / login),然后检查mongodb是否有正确的条目并输出Login Success,然后如果输入正确则重定向到另一个页面并保留在同一页面上通过输出“无效的登录ID或密码”输入错误。

更新

服务器端代码

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/myproject';

var authenticate = function(db, req, callback){
var cursor = db.collection('LoginID').find({"_id" : req.body.userID, 
"Password" : req.body.Password
}).count(function(err,doc){
        if(err) return callback(err);
        if(doc == 0){
            console.log('Invalid Login ID or Password');
            return callback(null, doc);
        } else {
            console.log('Login Success');
            return callback(null, doc);
        }
    });
}
module.exports = {
postCollection : function(req,res){
    var username = req.body.userID;
    var Password = req.body.Password;
    //var createdDate =  "<b>" + day + "/" + month + "/" + year + "</b>"
    MongoClient.connect(url, function(err, db) {
        //assert.equal(null, err);
        if(err) {
            res.send(err);
            res.end();
        }
        authenticate(db, req, function(err,doc) {
            if(err)
                res.send(err);
            else{
                    if(!doc){
                        res.send( ' Invalid Login ID or Password ' );
                        res.end();
                    } else {
                        res.send("Login success")
                        res.end();
                    }
                }
            db.close();
        });
    });
}   
}   

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,只有在HTTP返回码为2xx时才会调用成功回调。 如果发回重定向,则将其视为错误。

文档提到它:

  

如果请求成功,则为状态   代码函数采用与成功回调相同的参数; 如果   它导致错误(包括3xx重定向),它们采用相同的方法   参数作为错误回调。

来自http://api.jquery.com/jquery.ajax/,statusCode部分。

此外,您必须要小心:如果AJAX请求收到302响应,它将不会执行重定向:这是您自动执行此操作的Web浏览器(经典导航)的用户代理,但是对于XHR / AJAX,你必须实现它。