2010-11-25 3 views
-1

J'essaye de faire fonctionner jStree (jQuery tree control) dans mon ASP.NET (C#) page. J'utilise un service WCF pour renvoyer une chaîne de test de JSON.Impossible de charger JSON dans un jstree à partir du service WCF (ou Comment trouver ce qui ne va pas quand jstree reste sur "loading ...")

Ouverture de l'URL du service WCF dans le navigateur fonctionne très bien - Si je vais à l'URL (http: // localhost/site/GetTree) je reçois le JSON (regarde comme l'ouverture XML dans le navigateur, avec la mise en évidence de la syntaxe et thingys onglet pliable)

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"attr": { "id": 2, "rel": "default" }, "data": "A node", "children": [ { "data": "Child 1", "attr": { "id": 43, "rel": "document" } }, {"data": "Child 2", "attr": { "id": 25, "rel": "document"} } ] }</string> 

jstree lui-même fonctionne très bien - si je mets le même JSON dans "manuellement" dans mon document.ready comme ceci:

"json_data": { 
"data": 
[{ 
"attr": { "id": 2, "rel": "default" }, 
"data": "A node", 
"children": 
[{ 
"data": "Child 1", "attr": { "id": 43, "rel": "document" } 
},{ 
"data": "Child 2", "attr": { "id": 25, "rel": "document"} 
}]},{ 
"attr": { "id": "li.node.id", "rel": "document" }, 
"data": { 
"title": "Long format demo", 
"attr": { "href": "#" } 
}}]}, 

Je reçois l'un arbre ppearing avec ces noeuds dedans.

Mais, en combinant les deux:

"json_data": { 
    "ajax": { 
     "url": "GetTree", 
     "data": function (n) { 
      return { 
      }; 
     } 
    } 
}, 

... échoue. Le jstree apparaît comme le mot "chargement ..." et un gif de chargement animé. Et atteint un point d'arrêt à l'intérieur de la méthode de service WCF (tout comme la navigation pour le faire).

A: Une idée où je me suis trompé?

B: Une idée comment je découvre quel est le problème? La documentation de jstree n'était d'aucune aide, et je ne vois aucun message d'erreur.

Merci.

Mise à jour: résolu

Merci à Mikael Eliasson de remarquer que mon service doit être de retour XML et non JSON.

service WCF code-behind:

//        this responseformat bit below fixed it 
[WebGet(UriTemplate = "GetTesto", ResponseFormat = WebMessageFormat.Json)] 
[OperationContract] 
public Testo GetTesto()  
{ 
    return new Testo(); 
} 
+1

Je commencerais par vérifier la demande Web. le verbe, et le corps, etc. dans firebug par exemple. – akonsu

Répondre

1

pourrait être une question stupide, mais vous avez activé le plugin json_data, non? Comme akonsu dit inspecter la réponse dans un outil comme Firebug.

Il me semble que votre service WCF ne renvoie pas JSON mais plutôt une réponse XML. Je pense que c'est ton problème. La meilleure chose est probablement de changer le service pour retourner JSON. Si vous ne pouvez pas faire cela, vous pouvez ajouter la fonction de succès et transformer la chaîne en JSON avec la fonction $ .parseJSON()

J'espère que cela aide. Mais encore une fois vous devriez vraiment commencer à utiliser Firebug ou quelque chose de similaire, car il y a beaucoup de fois où vous devez inspecter la réponse ou déboguer javascript.

+0

Merci! C'était * return * xml (j'ai juste supposé que IE devait afficher le json de la façon dont il affiche XML, comme quelqu'un m'a dit que tous les services de wcf utilisaient json par défaut maintenant). J'ai ajouté * ResponseFormat = WebMessageFormat.Json * à l'attribut WebGet de la méthode de service et cela a fonctionné. – MGOwen