serialize form data array jquery node.js express jsonp

form - serialize table jquery



¿Cuándo esta estructura JSON se convierte a todas las cadenas? (2)

Me encontré con el mismo problema. jQuery $ .post y $ .ajax convierte los números enteros en cadenas al momento de clasificar JSON. Puede verificarlo mirando los datos en el lado del servidor. El servidor recibe algo como {"age": "3"}, mientras que usted realmente quiere {"age": 3}.

La solución que funciona es evitar dar objetos puros a jQuery, pero asignarle una cadena:

$.ajax({ type:''POST'', url: ''/api/...'', data: JSON.stringify(data), contentType: ''application/json'' })

Estoy enviando una estructura JSON a mi servidor de nodo / expreso y estoy guardando el objeto en una base de datos. El problema es que envío JSON con enteros y valores booleanos, pero todo se guarda como cadenas.

Aquí está mi código de nodo / expreso:

var express = require(''express''); var app = express(); app.enable("jsonp callback"); app.use(express.bodyParser()); // allow cross origin scripting to get data from devices directly app.all(''*'', function(req, res, next) { res.header(''Access-Control-Allow-Origin'', ''*''); res.header(''Access-Control-Allow-Methods'', ''PUT, GET, POST, DELETE, OPTIONS''); res.header(''Access-Control-Allow-Headers'', ''Content-Type''); next(); }); app.post(''/departures'', function(req, res) { /* I started using this to convert back to integers - but need to solve the problem for (var i in req.body.data) { req.body.data[i].siteid = parseInt(req.body.data[i].siteid); } */ console.log(''saving data ''+JSON.stringify(req.body.data)); positionProvider.save(req.body.data, function(){ res.json({status:''success''}); }) });

Aquí es cómo estoy publicando con jQuery:

var data = [{"siteid":123}]; $.ajax({ type: ''POST'', url: serverUrl + ''/departures'', data: { data: data }, success: function(resp) { alert(''saved departure data ''+JSON.stringify(data)) }, error: function(err) { console.log(''error posting to server...''); console.log(err); } });

El lado de jquery informa que envió {"siteid": 123} pero el lado del nodo informa que recibió {"siteid": "123"}.

¿Dónde se convierte el entero a una cadena?


Sus datos se convierten en una cadena como producto de enviarlos del cliente al servidor. Recuerde, el cliente y el servidor no se están comunicando realmente en JSON, se están comunicando en texto o datos binarios. El servidor (¿Express?) Interpreta implícitamente los datos enviados como una cadena, que se convierte a JSON si incluye el encabezado de solicitud de content-type: application/json . Necesitará explícitamente escribir cheque y convertir en el servidor si desea que los datos persistan en un formato específico.

TLDR (comentarios); No confíe en el cliente para enviar datos válidos. Límpielo antes de guardarlo en la base de datos.