通过jQuery-POST发送JSON文件,错误的内容类型

时间:2013-11-27 12:03:53

标签: jquery json

我想将带有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?

2 个答案:

答案 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