Jquery Ajax发布json到webservice
我试图将一个JSON对象发布到一个asp.net webservice。
我的json看起来像这样。
var markers = { "markers": [
{ "position": "128.3657142857143", "markerPosition": "7" },
{ "position": "235.1944023323615", "markerPosition": "19" },
{ "position": "42.5978231292517", "markerPosition": "-3" }
]};
我正在使用json2.js,来对我的json对象进行串联。
我正在使用jquery将其发布到我的网络服务。
$.ajax({
type: "POST",
url: "/webservices/PodcastService.asmx/CreateMarkers",
data: markers,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){alert(data);},
failure: function(errMsg) {
alert(errMsg);
}
});
我得到了以下错误。
"无效的JSON原语。
我找到了很多与此相关的帖子,这似乎是一个非常普遍的问题,但我尝试的任何方法都无法解决这个问题。
当firebug将什么发布到服务器上时,它看起来像这样。
markers%5B0%5D%5Bposition%5D=128.3657142857143&markers%5B0%5D%5BmarkerPosition%5D=7&markers%5B1%5D%5Bposition%5D=235.1944023323615&markers%5B1%5D%5BmarkerPosition%5D=19&markers%5B2%5D%5Bposition%5D=42.5978231292517&markers%5B2%5D%5BmarkerPosition%5D=-3
我的网络服务函数正在被调用。
[WebMethod]
public string CreateMarkers(string markerArray)
{
return "received markers";
}
228
3
你提到使用json2.js来串联你的数据,但是POST的数据似乎是URLEncoded JSON 你可能已经看到了,但是这个关于无效JSON原语的帖子涵盖了为什么JSON被URLEncoded。
我建议不要将原始的、手动序列化的JSON字符串传入你的方法中]2。 ASP.NET将自动对请求的POST数据进行JSON反序列化,所以如果你手动序列化并向ASP.NET发送一个JSON字符串,你最终将不得不对JSON序列化字符串进行JSON序列化。
我建议按照这样的思路来做。
避免无效的JSON原语问题的关键是给jQuery的
data
参数传递一个JSON字符串,而不是一个JavaScript对象,这样jQuery就不会试图对你的数据进行URLEncode。在服务器端,将你的方法的输入参数与你传入的数据的形状相匹配。
如果你愿意,你也可以接受一个数组,如
Marker[] Markers
。 ASMX ScriptServices使用的反序列化器(JavaScriptSerializer)相当灵活,它将尽其所能把你的输入数据转换成你指定的服务器端类型。1.
markers
不是一个JSON对象。它是一个普通的JavaScript对象。 2.2. 阅读关于data:
选项。如果你想以JSON格式发送数据,你必须先对它进行编码。
jQuery不会自动将对象或数组转换为JSON。
但我认为错误信息来自于解释服务的响应。你发回的文本不是JSON。JSON字符串必须用双引号括起来。所以你必须这样做。
我不确定你的实际问题是发送还是接收数据。
我也遇到过这个问题,这是我的解决办法。
如果你在解析数据时遇到无效的JSON对象异常,即使你知道你的JSON字符串是正确的,在解析为JSON之前,在你的ajax代码中对你收到的数据进行串联。