【发布时间】:2010-12-25 13:01:09
【问题描述】:
我不确定来自 WCF 的 JSON 响应有什么问题,但它没有被正确解析。我可能犯了一个简单的错误,希望有人能发现它。我正在使用 VS 2008 Pro SP1。
当我直接导航到 url 时,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。
感谢您的帮助。
【问题讨论】:
-
fiddler 说您从您的服务和 flickr 收到什么内容类型?
-
好问题,我已经更新了 OP