2011-12-01 15 views
9

Używam MVC do przekazywania danych JSON do JsTree i wyświetlania hierarchicznego informacji. Wszystko działa dobrze, jednak zdarzają się sytuacje, gdy użytkownik nie ma dostępu do danych lub z jakiegoś powodu akcja MVC zgłasza wyjątek:Obsługa błędów jQuery JsTree i JSON

W tych przypadkach akcja przekazuje komunikat o błędzie JSON i ustawia od HttpStatusCode do NotAccepted lub InternalServerError.

Jednak grzesznik jsTree wciąż się kręci i wydaje mi się, że nie znajduje sposobu na zatrzymanie go i wyświetlenie komunikatu o błędzie.

Czy ktoś wcześniej rozwiązał ten problem? Jak można obsługiwać błędy podczas korzystania z wtyczki JSTree JSON?

UPDATE:

I zorientowali się, jak uchwycić błąd:

$("#jstree1").jstree({ 
     "json_data": { 
      "ajax": { 
       "url": serviceUrl, 
       "data": function (n) { 
         return { pid: n.attr ? n.attr("id") : "" }; 
       }, 
       "error": function (x, s, r) { var err = $.parseJSON(x.responseText); if (err!="") { alert(err); } } 
      } 
    } 

Wydaje się, że JsTree robi uzyskać MVC http statusCode i błąd, teraz muszę dowiedzieć się, jak powiedz JsTree, aby przestał czekać i usuń obraz tarczy!

Szukam również dobrego sposobu pokazania błędu w JsTree, czy powinienem zarządzać komunikatem o błędzie poza nim?

+0

Dalsze odkrycia, że ​​jest możliwe, aby uchwycić ten błąd. – sam360

+0

Potrzebuję odpowiedzi na to :) –

Odpowiedz

0

Może powinieneś zajrzeć do tego błędu w warstwie powyżej .jstree. Być może poprzez obsługę zdarzenia window.onerror możesz to osiągnąć. W tym miejscu możesz wywołać funkcję, która odbuduje drzewo lub coś takiego? Pamiętaj, aby uwzględnić ten skrypt jako pierwszy na swojej stronie.

<script type="text/javascript"> 
window.onerror = function(x, s, r){ 
    alert('An error has occurred!') 
} 
</script> 
4

Rozwiązałem ten problem.

Tylko uwaga-na przykład powyższy kod do obsługi błędów ajax połączeń jest nieprawidłowy, proszę zobaczyć pełną poniższy przykład:

 $('#YourTree').jstree({ 
     "json_data": { 
      "ajax": { 
       "url": "/Controller/Action", 
       "data": function() { 
        return { Parameter1: "Value1", Parameter2: "Value2" } 
       }, 
       "type": "POST", 
       "dataType": "json", 
       "error": function (jqXHR, textStatus, errorThrown) { $('#YourTree').html("<h3>There was an error while loading data for this tree</h3><p>" + jqXHR.responseText + "</p>"); } 
      } 
     } 
    }); 

oraz w rzeczywistym działaniu, trzeba ustawić kod stanu odpowiedzi HTTP 1 i napisz błąd. na przykład

Response.StatusCode = 1 
Response.Write("Error you want to go into jqXHR.responseText here"); 

Enjoy :)

+0

Właśnie tego szukałem. Dzięki! –

+0

Stwierdziłem, że nadpisanie zawartości całego drzewa uniemożliwia działanie drzewa w przyszłych odświeżeniach. Zamiast tego poprawiam zawartość w drzewie, aby wyświetlić komunikat o błędzie i usunąć ładowany tekst, który jstree poprawnie zastępuje w kolejnych odświeżeniach: '$ ('# YourTree .jstree-loading'). RemoveClass ('jstree-loading') .find ('. jstree-anchor'). html ("Błąd:" + jqXHR.responseText); –