为什么jquery在发送到asp.net web方法之前不将我的数组转换为json字符串?

时间:2008-10-31 23:04:29

标签: asp.net jquery serialization

到目前为止,我只是将javascript字符串传递给我的Web方法,这些方法通常被解析为Guids。但现在我有一个方法接受IList ...在客户端上,我构建这个对象数组,然后尝试传递它:

$.ajax({
  type: 'POST',
  url: 'personalization.aspx/SetPersonalization',
  data: "{'backerEntries':" + backerEntries + "}",
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  success: postcardManager.SetPersonalizationComplete
});

帖子:

{'backerEntries':[object Object],[object Object],[object Object]}

错误回复:

Invalid JSON primitive: object.

出于某种原因,jquery似乎没有将我的数组转换为json字符串?有什么想法吗?我试着在backerEntries和{}周围放置[],以及{[]}只是在绝望中。我错过了一些明显的东西吗?

4 个答案:

答案 0 :(得分:10)

  

数据:“{'backerEntries':”+ backerEntries +“}”,

..与

相同
data: "{'backerEntries':" + backerEntries.toString() + "}",

......这几乎没用。如果您只想在查询字符串中传递名称为“backerEntries”的编码值列表,请使用Duncan的建议。如果您想对数据进行JSON编码,请获取a JSON library并致电JSON.stringify()

答案 1 :(得分:4)

您传递的数据正在尝试将其作为字符串传递。如果你想让jQuery转换它,那就把整个东西留作对象,例如

data:{backerEntries: backerEntries }

当然假设backerEntries是一个数组。 jQuery应该转换它并将它附加到查询字符串,因为这是它的默认行为。您当前的代码依赖于默认的JavaScript行为,默认情况下不会将数组转换为字符串表示形式。

答案 2 :(得分:2)

由于您使用的是ASP.NET,因此可以使用内置的ASP.NET AJAX序列化库:

var backerEntriesJson = Sys.Serialization.JavaScriptSerializer.serialize(backerEntries);

然后直接在你的jQuery ajax调用中传递:

...
data: backerEntriesJson,
...

答案 3 :(得分:-2)

这不是有效的JSON:{'foo':'bar'}

不是,从来没有,永远不会。 JSON处理器通常非常宽容,这当然是一种虚假的便利。

阅读规范。字符串被定义为用双引号括起来,而不是单引号,而不是笑脸字符,而不是以直角弯曲的金属片,而不是砖。没有提到单引号,句号。

现在,属性名称是JSON字符串。根据定义,它们必须用双引号括起来。

有效:{“foo”:“bar”} 有效的“{”foo“:100} 有效:{“foo”:true} 有效:{“foo”:[“one”,“two”],“bar”:false}

见www.json.org

见www.jsonlint.com