2009-12-11 6 views
1

Je ne suis pas sûr de ce qui ne va pas avec ma réponse JSON de WCF mais il n'est pas analysé correctement. J'ai probablement fait une simple erreur, j'espère que quelqu'un peut le voir. J'utilise VS 2008 Pro SP1.Méthode de service RESTful dans WCF

Lorsque je navigue directement vers l'URL Chrome pense qu'il s'agit d'un téléchargement de fichier. Quand j'ai frappé le service Flickr, il a retourné une chaîne dans le corps du navigateur, ce qui me fait penser que mon contenu est envoyé de manière incorrecte.

service

[ServiceContract] 
public interface IFoo 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/foos/", ResponseFormat = WebMessageFormat.Json] 
    Foo[] GetFoos(); 
} 

Modèle

// 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>'); 
      }); 
     }); 
    }); 

Quand je regarde la réponse en F iddler Je vois:

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

Mise à jour

Voici les en-têtes brutes de Fiddler pour la comparaison de réponse (moi contre flickr)

mine

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 

On dirait que la grande différence est que j'ai application/json et qu'ils ont une application/x-javascript. Comme je l'ai noté ci-dessus, j'utilise WebMessageFormat.Json sur le contrat d'exploitation.

Merci pour toute aide.

+0

De quel type de contenu est-ce que fiddler dit que vous recevez de votre service, et de flickr? –

+0

Bonne question, j'ai mis à jour le OP – blu

Répondre

2

Je crois que l'application/JSON est le type de support approprié pour ce que vous faites.

Le fait que le navigateur ne le rende pas et vous donne simplement une boîte de dialogue de téléchargement de fichier n'est pas surprenant. Les navigateurs ne rendent directement qu'un très petit nombre de types de médias.

Cela ne veut pas dire qu'il y a quelque chose de mal avec ce que votre service Web renvoie. Cela signifie simplement que le navigateur n'a pas de fonction intégrée pour convertir json en une représentation html à des fins d'affichage.

Si vous récupérez cette représentation json dans votre code client, vous devriez pouvoir gérer comme vous le faites toutes les autres données json.

+0

Ok merci pour ça, ça rétrécit ce qui ne va pas. – blu

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

enlever les .items

+0

Merci pour la réponse, je vais l'essayer plus tard. Fait intéressant, j'ai copié mon JQuery de http://docs.jquery.com/Ajax/jQuery.getJSON – blu

+0

J'utilise 1.3.1 sur mon projet (j'ai exactement la même routine en cours d'exécution) –

+0

Le résultat est une liste de "undefined " – blu