2011-12-24 45 views
7

Tôi sử dụng node.js và express. Khi tôi nhấn nút (btnSend), tôi muốn gửi dữ liệu đến node.js bằng cách thể hiện (không làm mới trang). Làm cách nào để gửi dữ liệu? Sử dụng jquery?Node.js - gửi biểu mẫu

Vui lòng trợ giúp.

Cảm ơn lời khuyên.

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

Đây là chủ đề, nhưng hãy xem xét gói "Tên người dùng:" và phần tử nhập văn bản có [thẻ nhãn] (https://developer.mozilla.org/en/HTML/Element/label). Nó làm cho hình thức ngữ nghĩa hơn một chút và có thể sử dụng được. – Xavi

Trả lời

15

Dưới đây là một phác thảo sơ bộ những gì jQuery của bạn sẽ giống như thế:

$("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 
    ); 
}); 

Đoạn mã này tìm tất cả các yếu tố hình thức trên trang và lắng nghe cho một sự kiện nộp từ họ. Biểu mẫu có thể được gửi theo một số cách (ví dụ: nhấn vào nút gửi, nhấn enter, v.v.), vì vậy, vì lợi ích của khả năng sử dụng, tốt nhất là lắng nghe các sự kiện gửi trực tiếp trái ngược với việc nghe các phím bấm sự kiện trên các nút gửi .

Khi sự kiện gửi xảy ra, mã ở trên trước tiên ngăn các hành động trình duyệt mặc định (trong số những thứ khác làm mới trang) bằng cách gọi e.preventDefault. Sau đó, nó sử dụng $.post để gửi dữ liệu biểu mẫu tới url được chỉ định trong thuộc tính hành động. Lưu ý rằng $.fn.serialize được sử dụng để tuần tự hóa dữ liệu biểu mẫu ở định dạng chuẩn.

đang nhanh bạn nên tìm một cái gì đó như thế này:

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); 

Các tài liệu trên express.bodyParser là một chút thưa thớt, nhưng sau một chút code spelunking nó trông giống như nó sử dụng node-querystring bên dưới lớp chăn.

Hy vọng điều này sẽ hữu ích!

+0

Tôi gặp sự cố khi nhận chức năng phản hồi phía máy khách để kích hoạt. hàm (dữ liệu) {/ ** mã để xử lý phản hồi ** /}, Bạn có cần phải thêm một res.end() hoặc một số mã như vậy vào mã phía máy khách không? – CMaury

+1

Không, bạn không cần phải gọi 'res.end' ở phía máy khách - chỉ ở phía máy chủ. Trong bảng điều khiển dành cho nhà phát triển của chrome, tôi sẽ vào tab mạng và đảm bảo yêu cầu bài đăng hoàn tất mà không có lỗi. Ngoài ra, hãy xem mã phản hồi phía máy chủ của bạn (tức là mã trong hàm '// req.body - chứa dữ liệu biểu mẫu ') và đảm bảo bạn kết thúc phản hồi của mình một cách chính xác. Hy vọng rằng sẽ giúp. – Xavi

+0

Tôi đã có thể thu hẹp vấn đề và không liên quan đến câu hỏi này. Đối với một số lý do các ứng dụng không thể tìm thấy fs.appendfile khi sử dụng mãi mãi nhưng nó hoạt động tốt khi sử dụng nodemon. – CMaury