我想将带有POST的json数组发送到网络服务器。一切正常,除了我的对象的错误内容类型。
“each”循环遍历我的表单,并将一对值添加到两个项目中。然后它将两个项添加到一个数组并获得下一对:
var jsonArray = []
$(form).each(function() {
.....
item = {};
item["name1"] = value1;
item["name2"] = value2;
jsonString = JSON.stringify(item);
jsonarray.push(jsonString);
...
当我将结果记录到控制台时,一切看起来都很棒。 POST方法如下所示:
$.ajax ({
type:"POST",
contentType: 'application/json',
url: siteRoot + "/" + ID + "/path",
data: jsonarray,
...
但是我从服务器收到一条错误消息:
Content-type标头是“application / json”,但是body不是可解析的JSON。
我应该使用哪种contentType?如果我查看日志文件,我得到这样的输出:
{"name1":"value1", "name2":"value2"}, {"name1":"value1", "name2":"value2"},...
我是否必须创建一个特殊的JSON-Object?
答案 0 :(得分:2)
错误消息是正确的,因为您的输出不是有效的JSON字符串,而是包含由分号分隔的JSON字符串的字符串。我建议你序列化整个数组而不是单个项目。首先像这样构建你的数组:
var itemsArray = []
$(form).each(function() {
...
item = {};
item["name1"] = value1;
item["name2"] = value2;
itemsArray.push(item);
...
然后像这样发布:
$.ajax ({
type:"POST",
contentType: 'application/json',
url: siteRoot + "/" + ID + "/path",
data: JSON.stringify(itemsArray),
...
如果你看一下你的内容,它应该是这样的:
[ {"name1":"value1", "name2":"value2"}, {"name1":"value1", "name2":"value2"}, ... ]
哪个是有效的JSON,应该反序列化为一个对象数组。
答案 1 :(得分:1)
问题在于将项目转换为JSON并添加到数组。这导致{}周围的引号。 喜欢:
["{"name1":"value1","name2":"value2"}"] // Not Valid
您应该将项目添加到数组然后转换它
[{"name1":"value1","name2":"value2"}] //valid