2009-12-11 62 views
1

我不確定來自WCF的JSON響應出了什麼問題,但它沒有正確解析。我可能犯了一個簡單的錯誤,希望有人能發現它。我正在使用VS 2008 Pro SP1。WCF中的REST風格的服務方法

當我直接導航到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>'); 
      }); 
     }); 
    }); 

當我看到在F響應iddler我看到:

[{"Id":1,"Name":"Foo1"},{"Id":2,"Name":"Foo2"},{"Id":3,"Name":"Foo3"}] 

更新

下面是小提琴手原標題爲響應比較(我對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 

它看起來最大的區別是我有應用程序/ json和他們有應用程序/ x-javascript。正如我上面提到的,我在操作合同上使用了WebMessageFormat.Json。

感謝您的任何幫助。

+0

什麼內容類型是小提琴手說你從你的服務和flickr收到? – 2009-12-11 14:58:02

+0

好問題,我已更新OP – blu 2009-12-12 00:32:01

回答

2

我相信,應用/ JSON是你在做什麼正確的介質類型。

事實上,瀏覽器不渲染它,只是給你一個文件下載對話框並不令人驚訝。瀏覽器僅直接渲染一小組媒體類型。

這並不意味着您的Web服務正在返回什麼錯誤。這僅僅意味着瀏覽器沒有任何內置的功能來將json轉換爲html表示以進行顯示。

如果您在您的客戶端代碼中檢索到這個json表示,您應該能夠像處理其他任何json數據一樣處理它。

+0

好的,謝謝你,這縮小了什麼是錯的。 – blu 2009-12-12 20:14:50

0
$.each(data, function(i, item)

刪除.items

+0

感謝您的回覆,我會稍後再嘗試。有趣的是,我複製我的JQuery從http://docs.jquery.com/Ajax/jQuery.getJSON – blu 2009-12-11 14:41:22

+0

我在我的項目上使用1.3.1(我有完全相同的例程運行) – 2009-12-11 15:33:36

+0

這會產生一個「undefined 「 – blu 2009-12-12 00:46:45