我创建了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。我需要改变什么?
答案 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代码。