关于javascript:Node.js,Ajax发送和接收Json

Node.js, Ajax sending and receiving Json

使用Ajax,我试图仅将Json数据发送到节点服务器,不进行任何处理,仅在发送时发出警报,在接收到时发出警报:

这是我的html5:具有onclick函数的简单按钮,可触发该函数使用ajax调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE HTML>
<html>
    <head>
       
            function send()
            {
                //alert("Hello World");
                $.ajax
                ({
                    type:"post",
                    url:"http://localhost:8000",
                    dataType:"json",
                    contentType:"application/json; charset=UTF-8",
                    data:  JSON.stringify({name:"Dennis", address: {city:"Dub", country:"IE"}})
                }).done(function ( data ) {alert("ajax callback response:" + data);
            });
       
    </head>
    <body>
        <button onclick="send()">Click Me!</button>
    </body>
</html>

这是节点服务器的一部分:用于创建服务器并侦听某些操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var port = 8000;
var server = http.createServer();
server.on('request', request);
server.listen(port);

function request(request, response)
{
    var store = '';
    response.writeHead(200, {"Content-Type":"text/json"});
    request.on('data', function(data)
    {
        store += data;
    });
    request.on('end', function()
    {
       store = JSON.parse(store);
        console.log(store);
        response.end(store);
    });
}

没有警报被触发,所以我不认为ajax正在尝试发送信息。


在服务器端尝试此操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var port = 8000;
var http = require("http");
var server = http.createServer();
server.on('request', request);
server.listen(port);
function request(request, response) {
    var store = '';

    request.on('data', function(data)
    {
        store += data;
    });
    request.on('end', function()
    {  console.log(store);
        response.setHeader("Content-Type","text/json");
        response.setHeader("Access-Control-Allow-Origin","*");
        response.end(store)
    });
 }

在客户端:

1
2
3
4
5
6
7
8
9
10
$.ajax
({
  type:"POST",
  url:"http://localhost:8000",
  crossDomain:true,
  dataType:"json",
  data:JSON.stringify({name:"Dennis", address: {city:"Dub", country:"IE"}})
 }).done(function ( data ) {
      alert("ajax callback response:"+JSON.stringify(data));
   })

希望这对你有用


您不能将response.write()response.end()与普通的javascript对象一起使用,只能编写Buffer或字符串。

因此,您需要做的是首先对对象进行字符串化。 首先将response.end(store);更改为response.end(JSON.stringify(store));或不要store = JSON.parse(store);(除非您正在执行此操作以验证JSON -如果是这种情况,则应将其包装在try-catch中,因为< x5>会引发解析错误)。