簡體   English   中英

獲取在ajax發布請求中傳遞的參數

[英]Getting parameters passed in the ajax post request

我正在嘗試從一個簡單的html頁面到一個nodejs快遞服務器,這會將值保存到mongo集合。

我傳遞了兩個post參數,即name和email,但是在服務器上我沒有傳遞傳遞的值。

服務器說:

TypeError:無法讀取未定義的屬性“ userName”。 可能是什么問題。

這是我的html文件

 <html>
    <head>
        <script type="text/javascript" src="../scripts/jquery.min.js"></script>
    </head>
    <body>
        <br> User Name :
        <input type="text" id="userName" name="userName">
        <br>
        <br>Email :
        <input type="text" id="emailId" name="emailId">
        <br>
        <br>
        <input type="submit" id="addAttrs" value="Add" onclick="addUser()">
    </body>
    <script type="text/javascript" src="../scripts/client.js"></script>
</html>

這是我在client.js的客戶端ajax post call

function addUser() {
    var usrName = document.getElementById("userName").value;
    var usrEmail = document.getElementById("emailId").value;
    console.log('User name :' + usrName + " Email :" + usrEmail);
    var obj = {
        'userName': usrName,
        'userEmail': usrEmail
    };
    console.log(JSON.stringify(obj));
    $.ajax({
        url: '/adduser',
        method: 'POST',
        data: JSON.stringify(obj),
        success: function(data) {
            console.log('user created , info :' + data);
        },
        error: function(data) {
            console.log('User creation failed :' + data);
        }
    });
}

這是我的服務器index.js文件

var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');
var bodyParser = require('body-parser');
app.use(express.static('public'));
var MongoClient = require('mongodb').MongoClient;
var routes = require('./routes/index');
app.use('/', routes);
app.use(function(req, res, next) {
    req.db = db;
    next();
});
var myCollection;
var db;         
var urlencodedParser = bodyParser.urlencoded({
    extended: false
})

var server = app.listen(8081, function() {
    db = MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
        if (err)
            throw err;
        console.log("connected to the mongoDB !");
        myCollection = db.collection('user_collection');
    });
    var host = server.address().address;
    var port = server.address().port;
    console.log("Example app listening at http://%s:%s", host, port);
})

module.exports = app;

這是我在router.js文件中處理請求的地方

var express = require('express');
var router = express.Router();
var path = require('path');

router.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, '../public/views', 'index.html'));
});

router.get('/userlist', function(req, res) {
    var db = req.db;
    var collection = db.get('usercollection');
    collection.find({}, {}, function(e, docs) {
        res.render('userlist', {
            "userlist": docs
        });
    });
});

router.post('/adduser', function(req, res) {
    var db = req.db;
    console.log(req.body);
    var userName = req.body.userName;
    var userEmail = req.body.userEmail;
    var collection = db.get('usercollection');
    collection.insert({
        "username": userName,
        "email": userEmail
    }, function(err, doc) {
        if (err) {
            res.send("There was a problem adding the information to the database.");
        } else {
            response = {
                message: 'user created successfully',
                status: 200
            };
            res.end(JSON.stringify(response));
        }
    });
});

module.exports = router;

你應該發送一個json而不是string.Make你這樣的ajax

刪除JSON.stringify()或將其JSON.parse(JSON.stringify(obj))因為您要發送的是字符串(即: typeof req.body是string )。

$.ajax({
        url: '/adduser',
        method: 'POST',
        data:obj,
        success: function(data) {
            console.log('user created , info :' + data);
        },
        error: function(data) {
            console.log('User creation failed :' + data);
        }
    });

並在您的服務器端。 使用app.use(bodyParser.json()); 這對於解析application / json類型非常重要。

現在我想我會為你工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM