Estoy tratando de hacer una petición vía Ajax, pero necesito convertir el objeto de la petición a formato JSON utilizando:
JSON.stringify(obj);
Sin embargo lo que obtengo como resultado es:
{"cSolicitud":[{}]}
Es decir, el objeto dentro del arreglo aparece vacío, pero en realidad tiene varias propiedades con sus respectivos valores. Pienso que la razón por la que JS identifica que es un objeto vacío es por la forma en que construí el objeto, que fue la siguiente:
// declaro la función que agrega dinámicamente las propiedades al objeto
var objectToSend = {
"cSolicitud": [new Object()]
};
var descriptor = Object.create({});
function addToGeneralO(prop, val, obj) {
if (Object.keys(obj.cSolicitud[0]) == '') {
console.log('objeto vacío');
descriptor = {
value: val,
configurable: true
}
Object.defineProperty(obj.cSolicitud[0], prop, descriptor);
}
objectToSend = obj;
};
// acá es una de las funciones en las que llamo la función:
$j(document).ready(function () {
$j(inputs).each(function (e) {
if (inputs[e].value != '' && inputs[e].value != '0') {
if (inputs[e].tagName == 'INPUT') {
var element = inputs[e];
var value = inputs[e].value;
var index = $j(inputs[e]).attr('data_campo');
usingData(dataFromSS1, element, value, index);
} else if (inputs[e].tagName == 'SELECT') {
var element = inputs[e];
var value = inputs[e].value;
var index = $j(inputs[e]).attr('data_campo');
var id = $j(this)[0].id;
var text;
if ($j(this)[0].id == 'empleo_colonia') {
text = $j('select#empleo_colonia option:selected')[0].innerHTML;
addOtherEls(id, value, objectToSend);
} else if ($j(this)[0].id == 'empleo_del_mpio') {
text = $j('select#empleo_del_mpio option:selected')[0].innerHTML;
addOtherEls(id, value, objectToSend);
};
selectFn(element, index, dataFromSS1, value, id, text);
};
};
});
});
No sé exactamente cuál es la razón, pero sospecho que esta forma de construir objetos tiene que ver con el hecho de que identifique al objeto como vacío.
function posting(obj) {
Object.defineProperty(obj.cSolicitud[0], "emp_palacio", descriptor);
var size = 0;
for (key in obj.cSolicitud[0]) {
if (obj.hasOwnProperty(key)) {
size++;
}
};
console.log(size); // esto da como resultado 0, lo que indica que el problema no está en el método de stringify, sino en la construcción de objeto
$j.ajax({
method: 'POST',
url: 'http://10.10.213.18:90/rest/SyncSolicitudes',
data: JSON.stringify(obj),
crossDomain: true,
}).done(function (msj) {
console.log('done');
console.log(msj);
}).fail(function (error) {
console.log(error);
})
};
Si alguien conoce una manera de solucionar esto u otra forma de construir un objeto agregando propiedades de manera dinámica, se los agradeceré mucho.