我已经创建了一个WCF 休息 .NET 4服务,并将其部署到本地的IIS 7中。如果我使用费德勒并使用请求生成器,我就能够调用该服务并查看返回的数据是否正常。如果我尝试在浏览器中访问相同的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。我需要改变什么?
发布于 2010-12-18 06:26:46
我一直使用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 />我使用火虫来调试这些东西。我可以准确地看到什么被张贴到web服务和什么回来了。如果web服务在抱怨,那么它抱怨的是什么。
了解为什么.d在http://encosia.com/2009/02/10/a-breaking-change-between-versions-of-aspnet-ajax/中是必需的。简而言之,我认为它是一个包装器,因此如果返回的数据是原始的字面JavaScript代码,则返回的数据被视为字符串,而不是返回和执行。
https://stackoverflow.com/questions/4476875
复制相似问题