2016-06-19 8 views
-1

からクライアントコードをデータを受信することはできません。私は、Webサーバー(Nodejs)にAJAXポストJSONを使用しますが、Webサーバはクライアント

self.getjson = function() { 
    var timeinfo = new Object(); 
    timeinfo.time = self.time; 
    timeinfo.address = self.address; 
    timeinfo.info = self.info; 

    return JSON.stringify(timeinfo); 
}; 

alert(self.getjson()); 

$.ajax({ 
     type: "POST", 
     //beforeSend:function(){$(".info").fadeIn('slow').html("正在提交,请稍后");}, 
     url:'/user/add/timetemp', 
     data: self.getjson(), 
     beforeSend: function (xhr) { 

      xhr.setRequestHeader("Content-Type", "application/json"); 
     }, 
     success: function(data){ 

     } 

}) 

サーバー・コードはapp.js:

router.route('/user/add/timetemp') 
.post(function(req,res){ 

console.log(req.body);  // your JSON 
res.send(req.body); // echo the result back 

});クライアントからの回答: enter image description here クライアントにはデータがあります。

サーバーからの応答:

が、サーバーはthe documentationから

答えて

0

nullである:

req.body

は、リクエストボディに提出されたデータのキーと値のペアが含まれています。 デフォルトではundefinedであり、body-parsermulterなどのボディ解析ミドルウェアを使用すると入力されます。

(マイ強調。)それはと続き:

次の例では、req.bodyを移入するために、体の解析のミドルウェアを使用する方法を示しています。

var app = require('express')(); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); // v1.0.5 
var upload = multer(); // for parsing multipart/form-data 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 

app.post('/profile', upload.array(), function (req, res, next) { 
    console.log(req.body); 
    res.json(req.body); 
}); 

サイドノート:

1.これらの変数のすべてselfには、グローバル変数です。グローバル変数はBad Thing™です。 :-)一般的に、コードをスコープ関数に入れて、そのスコープ関数内でローカルを使用することをお勧めします。

2. new Objectはほとんど必要ありません。あなたのgetjson機能がはるかに簡単になります

self.getjson = function() { 
    return JSON.stringify({ 
     time: self.time, 
     address: self.address, 
     info: self.info 
    }); 
}; 

(少しより便利なデバッグ時)

self.getjson = function() { 
    var timeinfo = { 
     time: self.time, 
     address: self.address, 
     info: self.info 
    }; 
    return JSON.stringify(timeinfo); 
}; 

3. ajax上ごbeforeSendコールバックの必要はありません。

$.ajax({ 
    type: "POST", 
    //beforeSend:function(){$(".info").fadeIn('slow').html("正在提交,请稍后");}, 
    url: '/user/add/timetemp', 
    data: self.getjson(), 
    contentType: 'application/json', 
    success: function(data) { 

    } 
}); 
+0

あなたの提案によれば、問題はついに解決されました。この問題の原因は、ajaxでbeforeSendコールバックを使用することです。組み込みのcontentTypeを使用するだけです。本当にありがとう。 – kevin

+0

@kevin:本当ですか?面白い!まあ、それを整理してうれしい。 –

+0

しかし、私はなぜajaxのbeforeSendコールバックの必要性を知らない。だから私は勉強するのが大変です。ありがとうございました – kevin

関連する問題