在VB.NET中工作。这是我的Web服务 - 它是一个aspx代码隐藏页面的方法,尽管它在asmx中的行为相同:
<WebService(Namespace:="http://mycompany/WebServices/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Partial Class AnAspxPageCodeBehind
Inherits System.Web.UI.Page
<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
Public Shared Function GetSettings(param As String) As String
Dim something As AClass = DoSomethingWith(param)
Return New JavaScriptSerializer().Serialize(something)
End Function
我称之为:
var dataToSend = '{"param":' + data + '}';
$.ajax({
url: 'AnAspxCodeBehind.aspx/GetSettings',
type: 'POST',
data: dataToSend,
contentType: "application/json; charset=utf-8",
datatype: 'json',
success: function (data) {
var ret = JSON.parse(JSON.parse(data).d);
}
});
注意成功函数中的双JSON.parse调用?当我以前完成Web服务(使用C#)之前,我只需要做var ret = JSON.parse(data.d)。
谁能告诉我这里发生了什么?
由于
大卫
答案 0 :(得分:0)
WebService框架根据请求自动将结果序列化为XML或JSON。您不应该手动执行JSON序列化,如果这样做,您最终会得到双重编码结果。
只需从函数中返回常规字符串,对象或对象列表即可。该框架将完成剩下的工作。在您的情况下,声明函数As AClass
。
您也不需要在客户端调用JSON.parse
。 jQuery将为您解析它并在data
中传递已解析的对象。