0

在 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 调用了吗?当我之前(使用 C#)完成 Web 服务时,我只需要执行 var ret = JSON.parse(data.d)。

谁能告诉我这里发生了什么?

谢谢

大卫

4

1 回答 1

0

WebService 框架会根据请求自动将结果序列化为 XML 或 JSON。您不应该手动进行 JSON 序列化,如果这样做,您最终会得到双重编码的结果。

只需从您的函数中返回一个常规字符串、对象或对象列表。框架将完成其余的工作。在您的情况下,声明 function As AClass

您也不需要JSON.parse在客户端调用。jQuery 将为您解析它并将解析后的对象传递给data.

于 2013-03-18T11:56:41.257 回答