2011-12-24 19 views
7

node.js'yi kullanıyorum ve ifade ediyorum. Düğmeye (btnSend) bastığımda, node.js'ye (sayfa yenilemeden) veriyi express'e göndermek istiyorum. Verileri nasıl gönderirim? Jquery kullanma?Node.js - formu gönderin

Lütfen

Yardım edin.

Tavsiye için teşekkürler.

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

Bu kod pasajı sayfadaki tüm form öğeleri bulur ve onlardan bir gönderme olayını dinler:

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

Bu, konu dışıdır, ancak "Kullanıcı adı" ve metin giriş öğesini bir [etiket etiketi] ile (https://developer.mozilla.org/en/HTML/Element/label) sarmalamayı düşünebilirsiniz. Bu formu biraz daha semantik ve kullanılabilir hale getirir. – Xavi

cevap

15

İşte jQuery gibi görünmelidir ne bir taslaktır var. Bir form çeşitli şekillerde gönderilebilir (bir gönderme düğmesine tıklamak, enter tuşuna basmak vb.), Bu yüzden kullanılabilirlik açısından, gönder düğmelerinde tıklama etkinliklerini dinlemeye doğrudan karşıdaki olayları dinlemek en iyisidir .

Gönderme olayı meydana geldiğinde, yukarıdaki kod ilk olarak e.preventDefault numaralı telefonu arayarak varsayılan tarayıcı eylemlerinin (diğerlerinin yanı sıra sayfayı yeniler) engeller. Daha sonra form verisini action niteliğinde belirtilen URL'ye göndermek için $.post kullanır. Form verisini standart biçimde serileştirmek için $.fn.serialize kullanıldığını unutmayın.

Sizin ekspres kodu şöyle görünmelidir: express.bodyParser üzerine

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

belgelerine biraz seyrek, ama kapakları altına node-querystring kullanır gibi code spelunking biraz sonra görünüyor.

Bu yardımcı olur umarız!

+0

İstemci tarafı yanıt işlevinin tetiklenmesinde sorun yaşıyorum. işlevi (veri) {/ ** yanıtı işlemek için kod ** /}, res.end() veya istemci tarafı koduna benzer bir şey eklemeniz gerekiyor mu? – CMaury

+1

Hayır İstemci tarafında 'res.end' çağrısı yapmanıza gerek yok - sadece sunucu tarafında. Chrome'un dev konsolunda, ağ sekmesinde ve posta isteğinin hatasız bir şekilde tamamlandığından emin olun. Ayrıca sunucu tarafı yanıt kodunuza bir göz atın (ör. // req.body'deki kod - form verisi fonksiyonunu içerir) ve cevabınızı doğru bir şekilde sonlandırdığınızdan emin olun. Umarım yardımcı olur. – Xavi

+0

Sorunu daraltmayı başardım ve bu soruyla ilgisiz. Bazı nedenlerle uygulama sonsuza dek kullanırken fs.appendfile bulamıyor ancak nodemon kullanırken iyi çalışıyor. – CMaury