Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax—为什么我得到的是错误函数而不是成功函数?_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript Ajax—为什么我得到的是错误函数而不是成功函数?

Javascript Ajax—为什么我得到的是错误函数而不是成功函数?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我不明白为什么我的代码运行的是error函数而不是success。我一直从console.log获取此信息 Object{readyState:0,getResponseHeader:function,getAllResponseHeaders:function,setRequestHeader:function,overrideMimeType:function…} 我想不出它为什么不执行我的逻辑,所以我尝试在我的错误函数中加入重定向,这就是我得到的 对象{readyState:0,getRe

我不明白为什么我的代码运行的是error函数而不是success。我一直从console.log获取此信息

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

我想不出它为什么不执行我的逻辑,所以我尝试在我的错误函数中加入重定向,这就是我得到的

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

基本上发生了同样的事情,所以到目前为止,我还不知道在编辑
窗口到窗口
之后我的问题是什么。 这是我的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的条目是否正确,并输出登录成功,如果输入正确,则重定向到另一个页面,如果输入错误,则通过给输出“无效的登录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();
        });
    });
}   
}   
var MongoClient=require('mongodb')。MongoClient;
var url='1〕mongodb://localhost:27017/myproject';
var authenticate=函数(db、req、回调){
var cursor=db.collection('LoginID').find({“\u id”:req.body.userID,
“密码”:req.body.Password
}).count(函数(错误、单据){
if(err)返回回调(err);
如果(doc==0){
console.log('无效的登录ID或密码');
返回回调(空,单据);
}否则{
log('Login Success');
返回回调(空,单据);
}
});
}
module.exports={
收集后:功能(请求、恢复){
var username=req.body.userID;
var Password=req.body.Password;
//var createdDate=“+day+”/“+month+”/“+year+”“
连接(url,函数(err,db){
//assert.equal(null,err);
如果(错误){
res.send(err);
res.end();
}
验证(数据库、请求、功能(错误、文档){
如果(错误)
res.send(err);
否则{
如果(!doc){
res.send('无效的登录ID或密码');
res.end();
}否则{
res.send(“登录成功”)
res.end();
}
}
db.close();
});
});
}   
}   

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

文件中提到:

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

从,状态代码部分


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

您必须响应此
未捕获引用错误:未定义windows
first它是window.location。否。=)@Repo我重新编辑了它,它给出了相同的错误,所以我的问题仍然存在。@AlivetoDie我相应地重新编辑了它,它给出了相同的错误,所以我的问题仍然存在。你能出示你的服务器端代码吗?我不确定我是否理解你的问题:正如标题中所述,你不理解为什么调用错误回调。您提到您在服务器上调用了登录端点,如果凭据良好,您希望将用户重定向到页面。如果AJAX请求得到302响应,则调用错误回调是正常的。你在参数中记录你得到的对象,但我看不出这个对象有什么问题,你想得到什么呢?基本上,我希望能够得到success函数,这样我可以根据api处理输入后给出的输出返回true或false,然后根据true或false重定向,但现在不管我输入了什么,我都会得到错误。抱歉,如果我是uncleras@farhadamjady提到的,我想我们错过了您的代码服务器端:您的服务器返回了什么?HTTP响应代码是什么?响应代码将确定调用哪个回调。在“登录ID或密码无效”时,它在检查数据库后返回“登录成功”如果http响应代码的条目不存在,您是指状态代码吗?如果您不知道http响应状态代码,我建议您检查有关REST API和http协议的一些最佳实践。供参考: