nodejs express,ajax发布w / jQuery和接收响应

遇到一些麻烦,得到快速响应我的jQuery Ajax请求。 实际发布工作正常,但无论我尝试我似乎无法真正从我的应用程序,我可以使用的数据响应。 起初,它只是不停地发布和挂起,就像一分钟后,它会回应一个警告,说像“XML文件加载”(不知道它来自哪里) – 反正,现在它给我

SyntaxError:在IncomingMessage上parsing(本机)的意外标记ILLEGAL。

在我的快速应用程序中,我有:

app.post('/save', function(req, res) { console.log(req.body.objectData); res.contentType('json'); res.send({ some: 'json' }); }); 

在我的jQuery中:

  $.ajax({ url: "/save", type: "POST", dataType: "json", data: {objectData: someObject}, contentType: "application/json", cache: false, timeout: 5000, complete: function() { //called when complete console.log('process complete'); }, success: function(data) { console.log(data); console.log('process sucess'); }, error: function() { console.log('process error'); }, }); 

您不是发送有效的JSON响应,而是包含单词json的string,因此JSON.parse()在客户端失败。 尝试这个:

 app.post('/save', function(req, res) { console.log(req.body.objectData); res.contentType('json'); res.send({ some: JSON.stringify({response:'json'}) }); }); 

JavaScript Object Notation是以对象格式在应用程序之间共享数据的一种方式。 但是,您无法通过HTTP请求发送对象,而无需先将其转换为string并将其作为单个variables发送。 函数JSON.parse()JSON.stringify()为我们做了这个。

既然你使用快递,

 res.contentType('json'); 

应该:

 res.type('json'); 

但设置types不是必需的,因为它是为你自动完成的。

请参阅res.type上的express api文档 。

另外请注意,对于express, res.send({blah:"gee"}); 在内部使用JSON.stringify自动转换json对象。 点击上面的链接后,点击res.send ,当你知道你正在发送JSON的时候, res.json会节省一点处理器的开销。 请注意,如果您发送JSON,则types会自动设置为JSON。

总是最好的看看来源 ! 请注意,res.send在检测到JSON时会调用this.json,而res.json会调用this.send(好像是一个循环,但它都可以运行)。

Pastor Bones的评论对我来说尤其重要,因为我使用$ .ajax发布到Node服务器。 我的相关部分的代码结束了这样的:

 // Incoming parameter "teams" is an array of objects function saveTeams(teams) { var xhr; var data = JSON.stringify({ teams: teams }); xhr = $.ajax({ type: "POST", url: "http://localhost:8000/saveteam", contentType: "application/json", data: data, headers: { Authorization: "..." } }); return xhr; } 

请注意,contentType标题与parsing工作相关。

在节点服务器端,我可以像这样处理负载:

 saveTeams: function (req, res, next) { var teams = req.body.teams; if (teams.length > 0) { console.log("Teams to be added:"); for (var i = 0; i < teams.length; i++) { console.log(teams[i]); // ... } } // ... }