为什么在发送到asp.net web方法之前jquery不将我的数组转换为json字符串?
到目前为止,我只是将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 });
post:
{'backerEntries':[object Object],[object Object],[object Object]}
错误响应:
Invalid JSON primitive: object.
出于某种原因,jquery似乎没有将我的数组转换为json字符串? 有什么想法吗? 我试着在backerEntries和{}周围放置[],以及{[]}只是绝望。 我错过了一些明显的东西吗?
数据:“{‘backerEntries’:”+ backerEntries +“}”,
..是相同的
data: "{'backerEntries':" + backerEntries.toString() + "}",
……这几乎没用。 如果您只想在查询字符串中传递名称为“backerEntries”的编码值列表,请使用Duncan的建议。 如果要对数据进行JSON编码,则获取JSON库并调用JSON.stringify()
。
您传递给您的数据正在尝试将其作为字符串传递给您。 如果你想让jQuery转换它,那就把整个东西留作一个对象,比如说
data:{backerEntries: backerEntries }
当然假设backerEntries是一个数组。 jQuery应该转换它并将它附加到查询字符串,因为这是它的默认行为。 您当前的代码依赖于默认的JavaScript行为,默认情况下不会将数组转换为其字符串表示forms。
由于您使用的是ASP.NET,因此可以使用内置的ASP.NET AJAX序列化库:
var backerEntriesJson = Sys.Serialization.JavaScriptSerializer.serialize(backerEntries);
然后直接在你的jQuery ajax调用中传递:
... data: backerEntriesJson, ...
这不是有效的JSON:{‘foo’:’bar’}
不是,从来没有,永远不会。 JSON处理器通常非常宽容,这当然是一种虚假的便利。
阅读规范。 字符串被定义为用双引号括起来,而不是单引号,而不是笑脸字符,而不是以直角弯曲的金属片,而不是砖块。 没有提到单引号,句号。
现在,属性名称是JSON字符串。 根据定义,它们必须用双引号括起来。
有效:{“foo”:“bar”}有效“{”foo“:100}有效:{”foo“:true}有效:{”foo“:[”one“,”two“],”bar“:假的
见www.json.org
见www.jsonlint.com