簡體   English   中英

從JavaScript到Node.js服務器的AJAX POST JSON

[英]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.

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