我用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',
});