2013-07-28 19 views
0

我发送Ajax请求:的Node.js和AJAX /取数据属性

var dataString = "{u:" + user + ", p:" + pa + "}"; 
      $.ajax({ 
       type: "POST", 
       url: "lg.html", 
       data: dataString, 
       success: function(data){ 
        if(data){ 
         window.location = "http://localhost:8001/ea.html"; 
        } 
        else{ 
         console.log(data); 
        } 
       } 
      }); 

现在,我有我的服务器的nod​​e.js:

http.createServer(req).listen(8000); 
function req(request, response){} 

我想我的表单数据属性,所以我做下一个:

request.data; 

但我看到,req.data是未定义的。我如何获得我的数据属性?

+0

它不应该是'req.body',那里没有'data'属性吗? – Bergi

+0

@Bergi Express不在这里使用。虽然,这是一个很好的建议。 –

回答

1

仅凭http module,您可以自行阅读和解析“数据”。

requestIncomingMessageReadable Stream,所以你通过结合其'data''end'事件做到这一点。

function req(request, response) { 
    var body = []; 
    request.setEncoding('utf8'); 

    request.on('data', function (chunk) { 
     body.push(chunk); 
    }); 

    request.on('end', function() { 
     var data; 

     if (request.url === '/lg.html') { 
      data = JSON.parse(body.join('')); 

      var user = data.u; 

      // ... 
     } 
    }); 
} 

或者,您可以像使用express一个框架,可以大大简化这一点:

var express = require('express'); 
var app = express(); 

app.use(express.bodyParser()); 

app.get('/lg.html', function (req, res) { 
    var user = req.body.u; 

    // ... 
}); 

不过,如果你传递JSON作为data:,你要确保它是formatted properly

var dataString = JSON.stringify({ u: user, p: pa }); 

你也应该设置contentTypeto match

// ... 
    data: dataString, 
    contentType: 'application/json', 
// ... 

或者,给jQuery.ajax()Object,让它URL编码,data

// ... 
    data: { u: user, p: pa }, 
// ...