2013-06-04 20 views
12

Próbuję wypełnić JSTree danymi JSON, które otrzymuję z usługi (która jest nazywana przy użyciu ajax). Jednak otrzymuję komunikat o błędzie "Ani dane, ani ustawienia ajax nie jest dostarczany" w pliku jquery.jstree.js. Z tego powodu JSTree wyświetla tylko ładujący się gif.Wypełnianie JSTree danymi JSON uzyskanymi w AJAX

kod AJAX (editted spróbować ustawienia json do testu lokalnej zmiennej, a następnie powrócić testu)

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; 
} 

kod JSTree

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

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

Po pewnym debugowania, odkryłem, że jsonData jest niezdefiniowana po przekazaniu do metody createJSTrees. Czy poprawnie odczytuję te dane w kodzie Ajax? Z góry dziękuję

+1

Musisz ustawić asynchronizację z powrotem na "fałsz", aby ta metoda zmiennych lokalnych działała. – Adam

Odpowiedz

1

Nie przetestowałem twojego podejścia wcześniej, gdzie podasz parametr danych bezpośrednio do wtyczki json_data, więc nie będę w stanie dostarczyć odpowiedzi na ten scenariusz.

Ponieważ jednak używasz wywołania AJAX do pobierania danych, nie możesz dostarczyć wywołania AJAX do JSTree i pozwolić mu samodzielnie obsłużyć wywołanie? Oto jak mam skonfigurowany wywołania AJAX w moim kodu:

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

Kiedy próbuję tego podejścia, pojawia się następujący błąd: POST http: // localhost: 8081/JavaTestService/rs/TestService/MyFirstTestService? LanguageCode = en_US & version = 2 405 (Metoda niedozwolona). Jakieś pomysły na to, dlaczego tak się dzieje? –

+0

Czy możesz zmienić parametr typu w powyższym kodzie z "POST" na "GET"? To powinno wystarczyć. Zaktualizowałem kod odpowiednio. – vincentks

+0

Pomyślałem, że to mogło być to. Brak błędów konsoli teraz, ale mój JSTree jest całkowicie pusty. Podobnie jest w przypadku podejścia opisanego przez Adama poniżej. Jakoś nie dostaję właściwych danych. Jeśli wiesz, że powyższy kod jest solidny, po prostu będę szukał gdzie indziej w mojej aplikacji, dlaczego tak może być. –

6

jsonData jest nieokreślona, ​​ponieważ getJSONData() nie zwraca wartości. Nie można polegać na wartości zwracanej z procedury obsługi sukcesu $ .ajax, chyba że przypiszesz zmienną local do getJSONData(), która zostanie zwrócona po zakończeniu wywołania $ .ajax. Ale chcesz czegoś takiego, co również ma tę zaletę, że jest asynchroniczne:

<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

Wdrożyłem powyższe podejście, ale moje JSTree jest całkowicie puste (nie nawet ładujący się gif). Nie dostaję też żadnych błędów konsoli, więc zgaduję, że dane json mogą być puste? Tak nie powinno być, ponieważ przetestowałem usługę. –

+1

Nie jestem zaznajomiony z jsTree, ale powyższy kod zapewni wywołanie funkcji createJSTrees (jsonData) z odpowiedzią JSON ze swojej usługi. Jak wygląda jsonData podczas wykonywania tej funkcji? – Adam

+0

Po dodaniu zmiennej lokalnej do getJSONData(), jsonData jest wciąż niezdefiniowana. Zmodyfikowany kod AJAX znajduje się w moim głównym wpisie. Test zmiennej jest również niezdefiniowany po wywołaniu AJAX. –

Powiązane problemy