Ajax对C#Web服务的调用返回对象中的对象?

时间:2014-03-19 09:39:45

标签: c# jquery ajax web-services

我有以下C#webservice(用于测试目的),我最终将变成WCFWebservice。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Albums : WebService {

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Person GetPeople() {
        return new Person("Mike", 12);
    }
}

我使用以下js来调用它:

    $(document).ready(function () {
        $.ajax({
            url: '/webservice/Albums.asmx/GetPeople',
            contentType: "application/json; charset=utf-8;",
            dataType: "json",
            type: 'post',
            success: function (data) {
                console.log(data);
            }
        });
    });

但奇怪的是(对我来说)是,我无法在data.Name内访问success()。 不知何故,它向d添加了一个对象data。 因此,如果我想访问该名称,我需要使用:data.d.Name

d来自哪里?

2 个答案:

答案 0 :(得分:2)

没什么好担心的。它来自在服务器上使用OData协议:

  

此模式确保从OData服务返回的JSON有效负载   有效的JSON语句,但不是有效的JavaScript语句。这个   防止OData JSON响应作为a的结果执行   跨站点脚本(XSS)攻击。

要了解细节,请参阅http://www.odata.org/documentation/odata-version-2-0/json-format

答案 1 :(得分:1)

默认情况下,这既可以用于OData格式,也可以用作安全措施。您可以通过将以下内容添加到ScriptMethod来轻松删除它:

BodyStyle = WebMessageBodyStyle.Bare