jQuery Ajax调用从WCF RIA REST服务返回null

时间:2010-12-18 06:01:41

标签: wcf rest jquery

我创建了WCF REST .NET 4服务并将其部署到本地IIS 7。 如果我使用Fiddler并使用请求构建器,我可以调用该服务并查看已返回的数据。如果我尝试在浏览器中点击相同的REST位置,则不会返回JSON,但它看起来像XML

我的服务如下:

[OperationContract]
[WebGet(UriTemplate = "/{id}/details.json",
    ResponseFormat=WebMessageFormat.Json)]
public SampleItem Get(string id)
{
    return new SampleItem{ Id=1, StringValue="value from string"};
}

我的web.config文件只有轻微的变化:

<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" defaultOutgoingResponseFormat="Json"/>

我正在尝试使用jQuery这样的服务:

$(document).ready(function () {
    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: "http://wcf-rest/service1/1/details.json",
        dataType: "json",
        success: function (data) { alert(data); },
        error: function (e) { alert("error"); }
    });
}); // end .ready

但是,每次都返回null。我需要改变什么?

1 个答案:

答案 0 :(得分:1)

我一直在使用jQuery和Ajax广泛使用JSON数据类型,我相信你需要将data更改为data.d。请参阅下面的示例。

function getMakes() {
    $.ajax({
        type: "POST",
        url: "../../WebService_VehicleAssignment.asmx/getAllVehicleMakes",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            var response = msg.d;
            $('#output').empty();
            $.each(response, function (vehicle, vehicle) {
                $('#output').append(new Option(vehicle.Make, vehicle.Id));
            });
        },
        failure: function (msg) {
            alert('failure');
        }
    });
}<br />

我使用Firebug来调试这些东西。我可以确切地看到发布到Web服务的内容以及即将发布的内容。如果网络服务抱怨,它抱怨什么。

了解 A breaking change between versions of ASP.NET AJAX .d所需的原因。简而言之,我相信它是一个包装器,因此返回的数据被视为一个字符串,而不是返回并执行它,如果它是原始的文字JavaScript代码。