我的网络服务方法如下,
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = FetchSitePerformanceAuto/{fromDate}/{country}")]
public List<DailyBingRTT_Performance_Last7Days_Result> FetchSitePerformanceAuto(string fromDate, string country)
{
SitePerformance objSiteP = new SitePerformance();
List<DailyBingRTT_Performance_Last7Days_Result> l = new List<DailyBingRTT_Performance_Last7Days_Result>();
l = objSiteP.getPerformanceByDateAndCountry(fromDate, country);
WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;
return l;
}
当我直接在浏览器中调用此方法时,它返回
{"FetchSitePerformanceAutoResult":[{"DailyTimeStamp":"Nov 03, 2013","Performance":106917},{"DailyTimeStamp":"Nov 04, 2013","Performance":119542},{"DailyTimeStamp":"Nov 05, 2013","Performance":106917},{"DailyTimeStamp":"Nov 06, 2013","Performance":119542},{"DailyTimeStamp":"Nov 07, 2013","Performance":106917},{"DailyTimeStamp":"Nov 08, 2013","Performance":119542},{"DailyTimeStamp":"Nov 09, 2013","Performance":106917}]}
但是当我尝试使用以下代码调用此服务方法时,
var newUrl = 'http://someurl:55250/BeingEdgeService.svc/FetchSitePerformanceAuto/11-09-2013/India?'
$.getJSON(newUrl, function (result) {
alert('Length ' + result.length);
});
它返回undefined。
此外,我还有一个服务方法
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = FetchSitePerformanceAuto/{fromDate}/{country}")]
public Stream FetchSitePerformanceStream(string fromDate, string country)
{
SitePerformance objSiteP = new SitePerformance();
List<DailyBingRTT_Performance_Last7Days_Result> l = new List<DailyBingRTT_Performance_Last7Days_Result>();
l = objSiteP.getPerformanceByDateAndCountry(fromDate, country);
var javaScriptSerializer = new JavaScriptSerializer();
var json = Encoding.UTF8.GetBytes(javaScriptSerializer.Serialize(l));
var memoryStream = new MemoryStream(json);
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
return memoryStream;
}
使用$.getJSON
调用此方法时,会返回正确的结果。
我认为问题出在服务方面可能是。
我使用Fiddler执行了我的代码,结果是
{"FetchSitePerformanceAutoResult":[{"DailyTimeStamp":"Nov 01, 2013","Performance":106917},{"DailyTimeStamp":"Nov 02, 2013","Performance":119542}]}
这是一个正确的JSON吗?因为无法解析它。
答案 0 :(得分:0)
执行此操作后会得到什么:
$.getJSON(newUrl, function (result) {
alert('Length ' + result);
});
而不是result.length,只需使用结果变量来查看响应。 由于响应封装在JSON对象中,因此您可以通过访问“result.data”来获取服务器返回的数据。
希望这有帮助。
答案 1 :(得分:0)
$.getJSON(newUrl, function (result) {
alert('Length ' + result.length);
});
没有错,反之则不完整。
因为我的JSON将返回对象,我应该这样做,
alert('Length ' + result.FetchSitePerformanceAutoResult.length);
我通过我的问题下面的评论来看到这一点。