[英]AJAX POST JSON from javascript to nodejs server
我試圖將JSON
對象從javaScript發送到node.js服務器。 我正在使用標准的XMLHttpRequest
從javascript和標准的node.js代碼發送它。
兩個代碼似乎可以正常通信,但是node.js總是給我一個空的JSON
對象。 我不太確定自己在做什么錯。
這是我的JavaScript代碼:
<html>
<head>
<script>
function xhrPost() {
var data = {"name":"John", "time":"2pm"};
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "http://[serverIP]:8080/addUser");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("content-type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(data));
}
</script>
</head>
<body onload="xhrPost()">
</body>
</html>
這是我的node.js代碼:
var express = require("express");
var myParser = require("body-parser");
var app = express();
app.use(myParser.urlencoded({extended : true}));
app.post("/addUser", function(request, response) {
console.log(request.body); // this line allways produce {}
response.send("Message received.");
response.end();
});
app.listen(8080);
您必須使用myParser.json()
作為中間件。 在https://github.com/expressjs/body-parser#bodyparserjsonoptions中查看有關此內容的更多信息
在以下行之后:
var myParser = require("body-parser");
您應該添加以下行:
var myParser = require("body-parser");
app.use(myParser.json());// parse application/json
這也是解決我的問題最有用的stackoverflow頁面。
我試圖獲取表單字段,在客戶端上將它們公式化為JSON,然后發送到服務器以將這些字段用於對單獨數據庫的MySQL調用。
Object {name: "", reps: "1", weight: "1", date: "", lbs: "0"}
我能夠使對象正確地記錄在客戶端上,但是每次我嘗試將數據發送到服務器時,
console.log(req.body);
總是會在服務器上返回
{}
undefined
服務器端我的設置與有效的數據傳遞是
var express = require('express');
var mysql = require('./dbcon.js');
var app = express();
var handlebars = require('express-handlebars').create({defaultLayout:'main'});
var request = require('request');
var myParser = require("body-parser");
var async = require('async');
app.set('view engine', 'handlebars');
app.set('port', Number(process.env.PORT || 3000));
app.use(myParser.json());
app.use(express.static('public'));
app.engine('handlebars', handlebars.engine);
在我的客戶端js文件上,我在表單提交時有一個函數可以執行以下操作:
var data = {
"name":document.getElementById("fname").value,
"reps":document.getElementById("freps").value,
"weight":document.getElementById("fweight").value,
"date":document.getElementById("fdate").value,
"lbs":bool
};
...
req.open("POST", "/insert", true);
req.setRequestHeader("content-type", "application/json;charset=UTF-8");
...
req.send(JSON.stringify(data));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.