通过AJAX调用保存和加载数组/对象,JSON字符串化问题



我用ajax调用保存了一堆变量、数组和对象,然后再加载它们。他们有很多人。我必须单独保存每个属性吗?这样的:

function save() {
var saveData = [
[obj1.a, obj1.b, obj1.c, obj1.d, obj1.e],
[obj2.a, obj2.b, obj2.c, obj2.d, obj2.e],
[obj3.a, obj3.b, obj3.c, obj3.d, obj3.e]
];
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "./api/save", true);
xhttp.setRequestHeader('Content-type', 'application/json');
xhttp.send(JSON.stringify(saveData));
}

或者有更近的路吗?我可以JSON。对单个对象进行字符串化,然后发送它们?这样的:

var saveData = [
[JSON.stringify(obj1)],
[JSON.stringify(obj2)],
[JSON.stringify(obj3)]
};

反应:

是的,这就是我要找的。当我从服务器调用数据返回时,我没有正确地加载它,所以我想也许你不能发送"whole"对象

例如,一旦我从服务器加载数据并解析它,我不应该以同样的方式访问它吗?

var loadedData = JSON.parse(this.responseText);
console.log(loadedData[1]["b"]);

应该给出与

相同的结果:
console.log(obj2["b"]);

是吗?

这就引出了问题的第二部分。加载一堆变量,数组,对象…有简单的方法吗?比如我想用从服务器加载的值覆盖本地值?我可以去吗?

obj1 = loadedData[0];

还是我必须逐个设置属性?如:

obj1[0] = loadedData[0][0];
ojb1[1] = loadedData[0][1];

等等?(或带循环)

如果您想保存所有数据,我建议将每个对象列在一个数组中:

const saveData = [obj1, obj2, obj3];

则执行xhttp.send(JSON.stringify(saveData));将发送所有3个对象的内容。这个数据结构和你现在做的不一样,但在大多数情况下,它比数组的数组要好。

其他建议:

  • 如果你的对象真的是数字索引,那么,而不是有很多独立的对象,我强烈建议有一个单一的数组,包含所有的对象代替,例如:
const data = [
/* contents of obj1 */,
/* contents of obj2 */,
/* contents of obj3 */,
];

等。然后你只需要发送

xhttp.send(JSON.stringify(data));
  • 如果你的对象不是所有的数字索引,考虑发送一个包含子对象的单一对象,例如:
const data = {
obj1: /* contents of obj1 */,
obj2: /* contents of obj2 */,
};

同样,它的数据结构与原始代码不同,但如果您稍后想要加载它们,它可能会更容易使用。

你可以用jquery这样做

$.ajax({ 
type: "POST", 
url: "./api/save", 
data: {data:JSON.stringify(saveData)},
dataType: 'json',
});

最新更新