2011-12-24 13 views
7

Uso node.js y express. Cuando presiono el botón (btnSend), deseo enviar datos a node.js por express (sin actualizar la página). ¿Cómo envío datos? ¿Usando jquery?Node.js - enviar formulario

Por favor ayuda.

Gracias por el asesoramiento.

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

Esto está fuera de tema, pero considere envolver "Nombre de usuario:" y el elemento de entrada de texto con una [etiqueta de etiqueta] (https://developer.mozilla.org/en/HTML/Element/label). Hace que la forma sea un poco más semántica y utilizable. – Xavi

Respuesta

15

He aquí un esbozo de lo que su jQuery debe verse como:

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

Este fragmento de código busca todos los elementos del formulario en la página y detecta un evento presentará de ellos. Un formulario se puede enviar de varias formas (por ejemplo, haciendo clic en un botón de enviar, presionando enter, etc.), por lo que, para mayor facilidad de uso, es mejor escuchar los eventos de envío directamente opuestos a escuchar para hacer clic en la tecla de eventos en los botones de envío .

Cuando se produce un evento de envío, el código anterior primero impide las acciones predeterminadas del navegador (que, entre otras cosas, actualiza la página) llamando al e.preventDefault. Luego usa $.post para enviar los datos del formulario a la url especificada en el atributo de acción. Tenga en cuenta que $.fn.serialize se utiliza para serializar los datos del formulario en un formato estándar.

Su código expreso debería ser algo como esto:

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

La documentación sobre express.bodyParser es un poco escaso, pero después de un poco de code spelunking Parece que utiliza node-querystring debajo de las cubiertas.

Espero que esto ayude!

+0

Tengo problemas para activar la función de respuesta del lado del cliente. función (datos) {/ ** código para manejar la respuesta ** /}, ¿Necesita agregar un res.end() o algo así al código del lado del cliente? – CMaury

+1

No, no debería tener que llamar a 'res.end' en el lado del cliente, solo en el lado del servidor. En la consola de desarrollo de Chrome, lo haría en la pestaña de red y me aseguraré de que la solicitud se complete sin errores. También eche un vistazo a su código de respuesta del lado del servidor (es decir, el código en la función '// req.body - contains form'') y asegúrese de finalizar su respuesta correctamente. Espero que ayude. – Xavi

+0

Pude reducir el problema y no está relacionado con esta pregunta. Por algún motivo, la aplicación no puede encontrar fs.appendfile cuando se usa para siempre, pero funciona bien cuando se usa nodemon. – CMaury