到目前为止,我只是将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和{}周围放置[],以及{[]}只是在绝望中。我错过了一些明显的东西吗?
答案 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