2011-12-01 22 views
9

Estoy usando MVC para pasar datos JSON a JsTree y mostrar una vista jerárquica de la información. Todo funciona bien, sin embargo, hay momentos en que el usuario no tiene acceso a los datos o por alguna razón la acción MVC arroja una excepción:jQuery JsTree y el manejo de errores JSON

En estos casos, la acción pasa un mensaje de error JSON y establece HttpStatusCode a NotAccepted o InternalServerError.

Sin embargo, el pecador de jsTree sigue girando y no parece encontrar la manera de detenerlo y mostrar el mensaje de error.

¿Alguien ha resuelto este problema antes? ¿Cómo se puede manejar el error cuando se utiliza el plugin de datos JSON de JsTree?

ACTUALIZACIÓN:

me di cuenta de cómo capturar el error:

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

Parece que JsTree se pone la MVC http statusCode y el error, ahora tengo que encontrar la manera de ¡dile al JsTree que deje de esperar y elimine la imagen del girador!

¿También estoy buscando una buena manera de mostrar el error en JsTree, o debo gestionar el mensaje de error fuera de él?

+0

Además descubrimiento, es posible capturar el error. – sam360

+0

Necesito una respuesta a esto :) –

Respuesta

0

Tal vez debería considerar manejar este error una capa encima del .jstree. Tal vez manejando el evento window.onerror puedes lograr esto. ¿Aquí podría llamar a una función que reconstruirá el árbol o algo así? Asegúrese de incluir este script como el primero en su página.

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

He resuelto este problema.

Sólo una nota- el ejemplo de código anterior para el manejo de errores de llamada Ajax es incorrecto, por favor ver un ejemplo completo a continuación:

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

Y en la acción real, es necesario establecer el código de estado de respuesta HTTP a 1 y escribe el error. p.ej.

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

Enjoy :)

+0

Justo lo que estaba buscando. ¡Gracias! –

+0

Descubrí que sobrescribir el contenido de todo el árbol evita que el árbol funcione en actualizaciones futuras. En su lugar, modifico el contenido dentro del árbol para mostrar el mensaje de error y elimino el texto de carga, que jstree reemplaza correctamente en renovaciones posteriores: '$ ('# YourTree .jstree-loading'). RemoveClass ('jstree-loading') .find ('. jstree-anchor'). html ('Error:' + jqXHR.responseText); ' –

Cuestiones relacionadas