Javascript JSON被错误地解析

Javascript JSON被错误地解析,javascript,arrays,node.js,json,ajax,Javascript,Arrays,Node.js,Json,Ajax,我有两个js文件,一个用于客户端,一个用于服务器。客户端输入登录数据并将其发送到服务器。服务器检查是否找到用户电子邮件,然后检查密码是否正确。我正在执行一个if语句来验证是否填充了“result”,然后继续检查密码是否正确。然而,我不断地得到这个错误,这个错误会显示在我的浏览器中。你能帮帮我吗?我已经被困了好几天了 Client.js var textbox; var emailtextbox; var dataDiv; window.onload = initLogin; function

我有两个js文件,一个用于客户端,一个用于服务器。客户端输入登录数据并将其发送到服务器。服务器检查是否找到用户电子邮件,然后检查密码是否正确。我正在执行一个if语句来验证是否填充了“result”,然后继续检查密码是否正确。然而,我不断地得到这个错误,这个错误会显示在我的浏览器中。你能帮帮我吗?我已经被困了好几天了

Client.js

var textbox;
var emailtextbox;
var dataDiv;
window.onload = initLogin;

function initLogin(){
    textbox = document.createElement("input");
    textbox.id="textbox";
    emailtextbox = document.createElement("input");
    emailtextbox.id="emailtextbox";
    dataDiv = document.createElement("div");
    var header = document.createElement("h1");
    header.appendChild(document.createTextNode("Select User"));
    var button = document.createElement("BUTTON");
    button.id = "myBtn";
    var textBtn = document.createTextNode("Click me");
    button.appendChild(textBtn);
    button.addEventListener("click", () => {
        SendLoginData();
    });

    var docBody = document.getElementsByTagName("body")[0];//Only one body

   docBody.appendChild(header);
   docBody.appendChild(dataDiv);
   docBody.appendChild(textbox);
   docBody.appendChild(emailtextbox);
   docBody.appendChild(button);
}

function SendLoginData(){
    var email = document.getElementById("emailtextbox").value; //I want to send it to server.js
    var password = document.getElementById("textbox").value;
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var dataObj = JSON.stringify(this.responseText);
        dataDiv.innerHTML = dataObj;
    }
};
xhttp.open("GET", "/login/" +password+ "&"+email, true);
xhttp.send();
}
Server.js

 var express = require('express');
 var app = express();
 app.get('/login/*', handleGetRequest); //how do I pass usrName here?
 app.use(express.static('public'));
 app.listen(5000);

 function handleGetRequest(request, response){
     var pathArray = request.url.split("/");
     var processID = pathArray[pathArray.length - 2];
     var pathEnd = pathArray[pathArray.length - 1];
     if(processID === 'register'){
          response.send("{working}");
     }
     else
         var registerArray = pathEnd.split("&");
         searchEmail(registerArray,response);
     }

     function searchEmail(registerArray, response){
     var mysql = require('mysql');
     var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'customer',
    port: 6000
});
con.connect();
var answer = selectData();
response.send(answer);

//Function that adds test data to database
function selectData(){
    var sql = "SELECT * FROM cust where LastName = '" +registerArray[0]+"'";
    con.query(sql, function (err, result) {
        console.log(JSON.stringify(result)); //correctly displaying stuffs from db
        if (JSON.parse(result).length) { //statement not working correctly.
            var pw = "SELECT ID FROM cust where LastName = '" +registerArray[0]+"'";
            con.query(pw, function (err, result) {
                var idcheck  = JSON.parse(result);
                console.log(result); //always shows undefined
                if (idcheck !== registerArray[1]){
                    return ("{re enter correct password}");
                } else {
                    return ("{login successfully}");
                }
            });

        } else {
            return("{sign up first}");
        }
    });
}
con.end();
试着这样做:

var response = JSON.parse(JSON.stringify(result[0]));

if (response.LastName) { 
    var pw = "SELECT ID FROM cust where LastName = '" +registerArray[0]+"'";
    con.query(pw, function (err, result) {
        var idcheck  = JSON.parse(result);
        console.log(result); //always shows undefined
        if (idcheck !== registerArray[1]){
            return ("{re enter correct password}");
        } else {
            return ("{login successfully}");
        }
    });
} else {
    return("{sign up first}");
}
console.log(result[0]);
{ "firstName": "My First Name", "lastName": "My Last Name" }
如果您使用console.log记录查询结果,如下所示:

var response = JSON.parse(JSON.stringify(result[0]));

if (response.LastName) { 
    var pw = "SELECT ID FROM cust where LastName = '" +registerArray[0]+"'";
    con.query(pw, function (err, result) {
        var idcheck  = JSON.parse(result);
        console.log(result); //always shows undefined
        if (idcheck !== registerArray[1]){
            return ("{re enter correct password}");
        } else {
            return ("{login successfully}");
        }
    });
} else {
    return("{sign up first}");
}
console.log(result[0]);
{ "firstName": "My First Name", "lastName": "My Last Name" }
您将获得一个RowDataPacket对象:

RowDataPacket { firstName: "My First Name", lastName: "My Last Name" }
这就是为什么您需要首先将其字符串化,使其变成这样:

var response = JSON.parse(JSON.stringify(result[0]));

if (response.LastName) { 
    var pw = "SELECT ID FROM cust where LastName = '" +registerArray[0]+"'";
    con.query(pw, function (err, result) {
        var idcheck  = JSON.parse(result);
        console.log(result); //always shows undefined
        if (idcheck !== registerArray[1]){
            return ("{re enter correct password}");
        } else {
            return ("{login successfully}");
        }
    });
} else {
    return("{sign up first}");
}
console.log(result[0]);
{ "firstName": "My First Name", "lastName": "My Last Name" }
最后,您可以解析它,并通过验证LastName属性是否存在来检查是否返回了用户。因此,所有这些都集中在一行中:

var response = JSON.parse(JSON.stringify(result[0]));

selectData不返回任何内容,所以我猜答案=selectData也是空的。使用GET发送密码等敏感数据是个坏主意。对此类用例始终使用POST。@vlaz yes…selectData为空。当我通过console.log显示它时,它返回未定义。我建议您进行一些研究,学习用于解决问题的技术。目前,我可以在整个应用程序中看到一些错误。您将遇到的许多问题和错误将在这里的堆栈溢出中得到回答。祝你好运