如何在没有页面重新加载的情况下将任意的JSON发送到node.js?

我的最终目标是在点击一个button时发送一个任意的JSON给node.js。 我目前只知道如何从窗体发送input。 以下是我发送表单信息的一些代码:

function postForm() { $('form').submit(function(e) { e.preventDefault(); // no page reload $.post( $(this).attr('action'), $(this).serialize(), function(data) { console.log('Code for handling response here.') }, 'json' ); }); } 

HTML的外观如下所示:

 <form action='/send' method='post'> <input name= "foo" type="radio" value=1> <input type="submit" value="Submit"> </form> 

相关的express / node.js代码如下所示:

 app.post('/send', function(request, response) { fs.appendFile('test.txt', JSON.stringify(request.body) + '\n', function(e) { if(e) throw e; console.log(request.body); }); }); 

但是,我不知道如何适应这个例子使用不是从表单input的数据。 为了给出上下文,我正在构build一个基于Web的用户研究,并且我想将收集到的有关用户的各种信息发送到node.js. 我尝试了表单提交工作的变体,但是我的尝试都没有成功。 我的印象是,我可以将$(this).serialize()客户端可以访问的任何其他数据,但我无法得到这种思路。 我也试着改变了许多.ajax()例子,但是那些总是redirect的页面是不可取的,因为如果页面刷新,我的学习将会失去用户状态信息。

我已经做了大量的客户端和服务器端编程,但是我几乎没有关于Ajax如何工作的知识,这对于解决这个问题是相当成问题的! 而且也很愚蠢,因为通常情况下,这就是粘在一起的东西:)

由于您使用jQuery,发送数据很简单 – 从button的click处理程序中调用$.post(url, data)

 $('#somebutton').click(function() { var data = { key: 'value', ... }; $.post('/send', data, function(res) { // success callback }); }); 

浏览器将使用数据参数的URL编码序列化对POST进行POST

 POST /send HTTP/1.1 Content-Type: application/x-www-form-urlencoded ... key=value&... 

哪个Express的bodyParser将没有任何问题。 或者,你可以告诉jQuery发送一个JSON序列化的数据

 $.post('/send', data, function(res) {}, 'json'); 

在你的情况下,jQuery如何传输数据(URL编码或JSON)并不重要,因为bodyParser自动反序列化两种格式。