我不确定来自WCF的JSON响应有什么问题但是它没有被正确解析。我可能犯了一个简单的错误,希望有人能发现它。我正在使用VS 2008 Pro SP1。
当我直接导航到网址时,Chrome认为这是一个文件下载。当我点击说flickr的服务时,它在浏览器主体中返回了一个字符串内联,这让我觉得我的内容发送错误。
服务
[ServiceContract]
public interface IFoo
{
[OperationContract]
[WebGet(UriTemplate = "/foos/", ResponseFormat = WebMessageFormat.Json]
Foo[] GetFoos();
}
模型
// this is in a separate assembly from the service
[DataContract]
public class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
JQuery的
$(document).ready(function() {
$.getJSON(fooUrl, function(data) {
alert(data); // data is an object, but data.items is null
// this complains 'length is null or not an object'
$.each(data.items, function(i, item) {
fooList.append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
});
});
});
当我看到Fiddler的回应时,我看到了:
[{"Id":1,"Name":"Foo1"},{"Id":2,"Name":"Foo2"},{"Id":3,"Name":"Foo3"}]
更新
以下是来自fiddler的原始标题,用于响应比较(me vs. flickr)
矿
HTTP/1.1 200 OK
Content-Length: 162
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
的Flickr
HTTP/1.1 200 OK
Date: Sat, 12 Dec 2009 00:30:36 GMT
P3P: policyref="http://p3p.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Sat, 12 Dec 2009 00:26:19 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: application/x-javascript; charset=utf-8
看起来最大的区别是我有application / json并且他们有application / x-javascript。如上所述,我在操作合同上使用WebMessageFormat.Json。
感谢您的帮助。
答案 0 :(得分:2)
我相信application / json是你正在做的正确的媒体类型。
浏览器不呈现它并简单地为您提供文件下载对话框的事实并不令人惊讶。浏览器仅直接呈现一小组媒体类型。
这并不意味着您的网络服务返回的内容有任何问题。它只是意味着浏览器没有任何内置功能可以将json转换为html表示以供显示。
如果在客户端代码中检索此json表示,则应该能够像处理任何其他json数据一样进行处理。
答案 1 :(得分:0)
$.each(data, function(i, item)
删除.items