solucion - javascript error converting circular structure to json
Error no detectado: conversión de estructura circular a JSON (2)
Tengo un tableDnD arrastrar y soltar con JSON.stringify:
jQuery(document).ready(function() {
jQuery("#Table").tableDnD({
onDragClass: "danger",
onDrop: function(table, row) {
jQuery.ajax({
url: "ajax.php",
type: "post",
data: {
''rows'' : JSON.stringify(table.tBodies[0].rows)
},
dataType: ''html'',
success: function(reponse) {
if(reponse) {
//alert(''Success'');
} else {
alert(''Erreur'');
}
}
});
}
});
});
Tengo este mensaje de error:
Error no detectado: conversión de estructura circular a JSON
Tengo el problema sólo en Chrome.
Debe usar la propiedad .innerHtml del elemento DOM en lugar de convertir todo el elemento DOM. Así que deberías estar buscando tener algo como:
JSON.stringify(table.tBodies[0].innerHTML)
No debes convertir un elemento DOM a JSON directamente.
Si bien, como ya experimentó, falla, por ejemplo, en Chrome, los resultados también pueden ser inesperados.
La razón de esto es porque los datos son circulares:
Un nodo tiene la propiedad childNode
contiene todos sus hijos y la propiedad parentNode
apunta al padre.
El formato JSON no admite referencias, por lo que deberá seguir las propiedades hasta que se alcance un final, pero debido a que un hijo apunta a su padre que tiene una lista de sus hijos, este es un bucle sin fin, esa es la razón por la que obtiene el error:
Error no detectado: conversión de estructura circular a JSON
Incluso si esto se resuelve con el navegador, puede tener otros problemas. Porque no solo existen childNodes
sino también childElements
. Lo mismo se parentNode
a parentNode
/ parentElement
, entonces también tiene nextSibling
, prevSibling
, firstChild
, lastChild
, ... que probablemente también se seguirán, por lo que terminaría en el archivo JSON aterrador y grande que contiene una serie de datos duplicados.