2011-12-01 14 views
9

Sto utilizzando MVC per passare i dati JSON a JsTree e mostrare una vista gerarchica delle informazioni. Tutto sta funzionando bene, tuttavia, ci sono momenti in cui l'utente non ha accesso ai dati o per qualche motivo l'azione MVC genera un'eccezione:jQuery Gestione degli errori JsTree e JSON

In questi casi, l'azione passa un messaggio di errore JSON e imposta il HttpStatusCode a NotAccepted o InternalServerError.

Tuttavia il peccatore di jsTree continua a ruotare e non sembra trovare un modo per fermarlo e mostrare il messaggio di errore.

Qualcuno ha già risolto questo problema in precedenza? Come si può gestire gli errori quando si utilizza il plug-in JSON di JsTree?

UPDATE:

ho capito come catturare l'errore:

$("#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); } } 
      } 
    } 

Sembra che JsTree fa ottenere il MVC http statusCode e l'errore, ora ho bisogno di capire come dì al JsTree di smettere di aspettare e rimuovere l'immagine dello spinner!

Sto anche cercando un buon modo di mostrare l'errore in JsTree, o dovrei gestire il messaggio di errore al di fuori di esso?

+0

ulteriore scoperta, è possibile catturare l'errore. – sam360

+0

Ho bisogno di una risposta a questo :) –

risposta

0

Forse dovresti esaminare questo errore con un livello al di sopra di .jstree. Forse gestendo l'evento window.onerror puoi ottenerlo. Qui puoi chiamare una funzione che ricostruirà l'albero o qualcosa del genere? Assicurati di includere questo script come primo nella tua pagina.

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

Ho risolto questo problema.

Solo una nota- l'esempio di codice qui sopra per la gestione degli errori chiamata AJAX non è corretta, si prega di consultare un esempio completo di seguito:

 $('#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>"); } 
      } 
     } 
    }); 

E in azione reale, è necessario impostare il codice http stato della risposta alla 1 e scrivi l'errore. per esempio.

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

Enjoy :)

+0

Proprio quello che stavo cercando. Grazie! –

+0

Ho scoperto che la sovrascrittura del contenuto per l'intero albero impedisce che l'albero funzioni negli aggiornamenti futuri. Invece, modifico il contenuto dell'albero per visualizzare il messaggio di errore e rimuovo il testo di caricamento, che jstree sostituisce correttamente negli aggiornamenti successivi: '$ ('# YourTree .jstree-loading'). RemoveClass ('jstree-loading')) .find ('. jstree-anchor'). html ('Errore:' + jqXHR.responseText); ' –