2011-12-24 24 views
7

Używam node.js i express. Kiedy naciśniesz przycisk (btnSend), chcę wysłać dane do pliku node.js ekspresowym (bez odświeżania strony). Jak wysłać dane? Używając jquery?Node.js - prześlij formularz

Proszę o pomoc.

Dzięki za poradę.

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

To nie jest temat, ale należy rozważyć zawijanie "Nazwa użytkownika:" i element wprowadzania tekstu za pomocą [znacznika etykiety] (https://developer.mozilla.org/en/HTML/Element/label). Dzięki temu forma staje się bardziej semantyczna i użyteczna. – Xavi

Odpowiedz

15

Oto szorstki zarys tego, co Twój jQuery powinna wyglądać następująco:

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

Ten fragment kodu wyszukuje wszystkie elementy formularza na stronie i nasłuchuje zdarzenia złożyć z nich. Formularz można przesłać na kilka sposobów (np. Klikając przycisk Wyślij, naciskając klawisz Enter itd.), Więc ze względu na użyteczność najlepiej jest wysłuchać zgłoszeń przesłanych bezpośrednio w przeciwieństwie do odsłuchiwania przycisków zdarzeń kliknięcia na przyciskach przesyłania .

Gdy wystąpi zdarzenie submit, powyższy kod zapobiega domyślnym działaniom przeglądarki (które między innymi odświeża stronę), wywołując e.preventDefault. Następnie używa $.post, aby wysłać dane formularza do adresu URL określonego w atrybucie działania. Zauważ, że $.fn.serialize służy do serializowania danych formularza w standardowym formacie.

wyraźnej kod powinien wyglądać mniej więcej tak:

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

Dokumentacja na express.bodyParser jest nieco skąpe, ale po kawałku code spelunking wygląda używa node-querystring pod kołdrą.

Mam nadzieję, że to pomoże!

+0

Mam problem z uruchomieniem funkcji odpowiedzi po stronie klienta. funkcja (dane) {/ ** kod do obsługi odpowiedzi ** /}, czy musisz dodać res.end() lub niektóre takie do kodu po stronie klienta? – CMaury

+1

Nie powinieneś zadzwonić 'res.end' po stronie klienta - tylko po stronie serwera. W konsoli programowej Chrome powinienem być na karcie sieci i upewnić się, że żądanie wysyłania kończy się bezbłędnie. Zapoznaj się również z kodem odpowiedzi po stronie serwera (tj. Z kodem w funkcji '// req.body - contains form data') i upewnij się, że poprawnie kończysz odpowiedź. Nadzieja, która pomaga. – Xavi

+0

Udało mi się zawęzić problem i nie ma to związku z tym pytaniem. Z jakiegoś powodu aplikacja nie może znaleźć pliku fs.appendfile podczas używania na zawsze, ale działa poprawnie, gdy używa się nodemon. – CMaury

Powiązane problemy