如何在没有页面重新加载的情况下将任意的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
自动反序列化两种格式。