鍍金池/ 問答/HTML/ node.js下ajax登錄請求點擊按鈕沒有發(fā)出post請求,但后臺卻接收到數(shù)據(jù)

node.js下ajax登錄請求點擊按鈕沒有發(fā)出post請求,但后臺卻接收到數(shù)據(jù)

ajax登錄請求第一次點擊按鈕沒有發(fā)出post請求(后來仔細看了一下,有post請求只是一閃而過,被吃了),但后臺卻能接收到數(shù)據(jù),且登錄驗證流程全都沒能生效,
第二次提交的時候才能正常post,登錄驗證流程流程也生效

登錄頁面的ajax代碼

<script>
        $("#login_botton").click(function(){
            //注冊按鈕的事件,用ajax提交表單
            $.post("/dologin",{
                "username" : $("#username").val(),
                "password" : $("#password").val()
            },function(result){
                if(result == "1"){
                    //登錄成功
                    alert("登陸成功!將自動跳轉(zhuǎn)到首頁");
                    window.location = "/";
                }else if(result == "-1"){
                    $("#regist-msg").html("用戶名不存在");
                    $("#regist-msg").addClass("alert-danger")
                }else if(result == "-2"){
                    $("#regist-msg").html("密碼錯誤!");
                    $("#regist-msg").addClass("alert-danger")
                }
            });
        });
    </script>

這是登錄驗證的代碼

var formidable = require("formidable");
var es6 = require("es6");
var path = require("path");
var fs = require("fs");

var db = require("./db.js");
var md5 = require("./md5");

exports.doLogin = function (req, res, next) {
    //得到用戶表單
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        //得到表單之后做的事情
        var username = fields.username;
        var password = fields.password;
        console.log(username+password);
        var jiamihou = md5(password);
        //查詢數(shù)據(jù)庫,看看有沒有個這個人
        db.find("users", {"username": username}, function (err, result) {
            if (err) {
                res.send("-5");
                return;
            }
            //沒有這個人
            if (result.length == 0) {
                res.send("-1"); //用戶名不存在
                return;
            }
            //有的話,進一步看看這個人的密碼是否匹配
            if (jiamihou == result[0].password) {
                req.session.login = "1";
                req.session.username = username;
                res.send("1");  //登陸成功
                return;
            } else {
                res.send("-2");  //密碼錯誤
                return;
            }
        });
    });
};

這是入口文件

var express = require('express');
var app = express();
var ejs = require('ejs');
var route = require('./route/route');
var myDo = require('./model/do');
var session = require('express-session');

//使用session
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
}));


app.set('view engine','ejs');

//靜態(tài)文件
app.use('/static',express.static('public'));
app.use("/avatar",express.static("./avatar"));

app.get('/login',route.showLogin);
app.post('/dologin',myDo.doLogin);

當我第一次點擊登錄的時候,從控制臺看到?jīng)]有post請求,但后臺卻打印出了賬號和密碼,
同一個頁面不刷新,我第二次點登錄的時候,控制臺就有post請求了,而且賬號驗證的代碼也能正常運行

回答
編輯回答
萌吟

找到問題了,是因為我的登錄頁還有一個form 標簽,點擊登錄按鈕會先走那個form標簽的action路徑,所以才提交不到

2017年6月22日 12:23