2013-06-04 6 views
12
erhalten wurden

Ich versuche, einen JSTree mit JSON-Daten zu füllen, die ich von einem Dienst erhalte (der mit Ajax aufgerufen wird). In der Datei jquery.jstree.js erhalte ich jedoch den Fehler "Keine Daten oder Ajax-Einstellungen geliefert". Aus diesem Grund zeigt JSTree nur ein Lade-GIF an.Einen JSTree mit JSON-Daten füllen, die in AJAX

AJAX Code (editierte Einstellung json zu lokalen Variablen Test, um zu versuchen, dann wieder Test)

function getJSONData() { 
    var test; 
    $ 
      .ajax({ 
       async : true, 
       type : "GET", 
       url : "/JavaTestService/rs/TestService/MyFirstTestService?languageCode=en_US&version=2", 
       dataType : "json", 

       success : function(json) { 
        test = json; 
       }, 

       error : function(xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
        test = "error"; 
       } 
      }); 
    return test; 
} 

JSTree Code

var jsonData = getJSONData(); 
createJSTrees(jsonData); 

function createJSTrees(jsonData) { 
     $("#supplierResults").jstree({ 
      "json_data" : { 
       "data" : jsonData 
      }, 
      "plugins" : [ "themes", "json_data", "ui" ] 
     }); 

Nach einiger Fehlersuche habe ich festgestellt, dass jsonData ist nicht definiert, wenn es an die createJSTrees-Methode übergeben wird. Erhalte ich diese Daten korrekt im Ajax-Code? Vielen Dank im Voraus

+1

Sie müssen Async zurück zu "false" für diese lokale Variable Ansatz arbeiten. – Adam

Antwort

1

Ich habe Ihren Ansatz noch nicht getestet, wo Sie den Datenparameter direkt an das json_data-Plugin liefern, so dass ich keine Antwort auf dieses Szenario liefern kann.

Da Sie jedoch einen AJAX-Aufruf verwenden, um die Daten zu erhalten, können Sie den AJAX-Aufruf nicht an JSTree übergeben und ihn alleine verarbeiten lassen? Hier ist, wie ich den AJAX-Aufruf in meinem Code konfiguriert haben:

 (...) 
     'json_data': { 
      'ajax': { 
       'url': myURL, 
       'type': 'GET', 
       'data': function(node) { 
        return { 
         'nodeId': node.attr ? node.attr("id") : '' 
        }; 
       } 
      }, 
      'progressive_render': true, 
      'progressive_unload': false 
     }, 
     (...) 
+0

Wenn ich diesen Ansatz versuche, erhalte ich den folgenden Fehler: POST http: // localhost: 8081/JavaTestService/rs/TestService/MyFirstTestService? LanguageCode = en_US & version = 2 405 (Methode nicht zulässig). Irgendwelche Ideen, warum das sein könnte? –

+0

Können Sie den Typ-Parameter im obigen Code von "POST" zu "GET" ändern? Das sollte den Trick machen. Ich habe den Code entsprechend aktualisiert. – vincentks

+0

Ich dachte, das könnte es gewesen sein. Jetzt keine Konsolenfehler, aber mein JSTree ist komplett leer. Es ist der gleiche Fall, wenn ich den von Adam unten beschriebenen Ansatz versuche. Irgendwie bekomme ich einfach nicht die richtigen Daten. Wenn Sie wissen, dass der obige Code solide ist, werde ich einfach weiter in meiner Anwendung nach dem Grund suchen. –

6

jsonData nicht definiert ist, weil getJSONData() gibt keinen Wert zurück. Sie können sich nicht auf den Rückgabewert Ihres $ .ajax-Success-Handlers verlassen, es sei denn, Sie vergeben eine Variable local zu getJSONData(), die zurückgegeben wird, nachdem der Aufruf von $ .ajax abgeschlossen wurde. Aber Sie wollen etwas wie dieses, das auch den Vorteil hat, asynchron zu sein:

<script type="text/javascript">  

$(function() { 
    $.ajax({ 
     async : true, 
     type : "GET", 
     url : "/JavaTestService/rs/TestService/MyFirstTestService?languageCode=en_US&version=2", 
     dataType : "json",  

     success : function(json) { 
      createJSTrees(json); 
     },  

     error : function(xhr, ajaxOptions, thrownError) { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    }); 
});  

function createJSTrees(jsonData) { 
    $("#supplierResults").jstree({ 
     "json_data" : { 
      "data" : jsonData 
     }, 
     "plugins" : [ "themes", "json_data", "ui" ] 
    }); 
}  

</script> 
+0

Ich habe den obigen Ansatz implementiert, aber mein JSTree ist komplett leer (nicht sogar ein Laden gif). Ich bekomme auch keine Konsolenfehler, also würde ich vermuten, dass die JSON-Daten möglicherweise leer sind? Das sollte jedoch nicht der Fall sein, da ich den Service getestet habe. –

+1

Ich bin nicht mit jsTree vertraut, aber der obige Code wird sicherstellen, dass createJSTrees (jsonData) mit der JSON-Antwort von Ihrem Dienst aufgerufen wird. Wie sieht jsonData aus, wenn diese Funktion ausgeführt wird? – Adam

+0

Nachdem eine lokale Variable zu getJSONData() hinzugefügt wurde, ist jsonData immer noch nicht definiert. Der editierte AJAX Code ist in meinem Hauptpost. Der Variablentest ist auch nach dem AJAX-Aufruf nicht definiert. –