2011-12-24 67 views
7

我使用node.js和express。当我按下按钮(btnSend)时,我想通过快递将数据发送到node.js(无需刷新页面)。我如何发送数据?使用jQuery的?Node.js - 提交表格

请帮忙。

感谢您的意见。

<form action="/Send" method="post"> 
Username: 
<input type="text" name="user" id="txtUser" /> 
<input type="submit" value="Submit" id="btnSend" /> 
</form> 
+1

这是关闭主题,但考虑使用[标签标签](https://developer.mozilla.org/en/HTML/Element/label)包装“用户名:”和文本输入元素。它使表单更具语义和可用性。 – Xavi 2011-12-24 14:11:57

回答

15

这里是你的jQuery应该是什么样子的粗略轮廓:

$("form").submit(function(e) { 
    e.preventDefault(); // Prevents the page from refreshing 
    var $this = $(this); // `this` refers to the current form element 
    $.post(
     $this.attr("action"), // Gets the URL to sent the post to 
     $this.serialize(), // Serializes form data in standard format 
     function(data) { /** code to handle response **/ }, 
     "json" // The format the response should be in 
    ); 
}); 

这段代码发现页面上的所有表单元素和监听来自他们提交事件。表单可以通过多种方式提交(例如,点击提交按钮,敲入回车等),所以为了可用性,最好是直接监听提交事件,而不是在提交按钮上监听点击事件按键。

当发生提交事件时,上面的代码首先通过调用e.preventDefault来防止默认浏览器操作(其中包括刷新页面)。然后它使用$.post将表单数据发送到action属性中指定的url。请注意,$.fn.serialize用于以标准格式序列化表单数据。

您的明确的代码应该是这个样子:

var express = require('express') 
    , app = express.createServer(); 

app.use(express.bodyParser()); // Automatically parses form data 

app.post('/Send', function(req, res){ // Specifies which URL to listen for 
    // req.body -- contains form data 
}); 

app.listen(3000); 

的文档上express.bodyParser有点稀疏,但有点code spelunking后,它看起来像它使用node-querystring井盖下面。

希望这会有所帮助!

+0

我无法启动客户端响应功能。函数(数据){/ **代码来处理响应** /},你需要添加一个res.end()或一些这样的客户端代码? – CMaury 2013-02-24 18:17:30

+1

不,你不应该在客户端调用'res.end' - 只在服务器端。在Chrome的开发控制台中,我会在网络选项卡中确保发布的请求无误地完成。还要看看你的服务器端响应代码(即'// req.body中的代码 - 包含表单数据函数)并确保你正确地结束你的响应。希望有所帮助。 – Xavi 2013-02-24 19:20:41

+0

我能够缩小这个问题的范围,并且与这个问题无关。出于某种原因,应用程序在永久使用时无法找到fs.appendfile,但使用nodemon时可以正常工作。 – CMaury 2013-02-24 22:37:40