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.