JQuery JsTree и JSON обработка ошибок - PullRequest
9 голосов
/ 01 декабря 2011

Я использую MVC для передачи данных JSON в JsTree и отображения иерархического представления информации. Все работает просто отлично, однако бывают случаи, когда пользователь не имеет доступа к данным или по какой-то причине действие MVC выдает исключение:

В этих случаях действие передает сообщение об ошибке JSON и устанавливает HttpStatusCode в NotAccepted или InternalServerError.

Однако грешник jsTree продолжает вращаться, и я, похоже, не могу найти способ остановить его и показать сообщение об ошибке.

Кто-нибудь решал эту проблему раньше? Как можно обрабатывать ошибки при использовании плагина данных JSON от JsTree?

UPDATE:

Я понял, как зафиксировать ошибку:

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

Похоже, что JsTree получает код состояния MVC http и ошибку, теперь мне нужно выяснить, как сказать JsTree прекратить ждать и удалить изображение счетчика!

Я также ищу хороший способ показать ошибку в JsTree, или я должен управлять сообщением об ошибке за его пределами?

Ответы [ 2 ]

4 голосов
/ 22 января 2013

Я решил эту проблему.

Только примечание - приведенный выше пример кода для обработки ошибок вызова ajax некорректен, см. Полный пример ниже:

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

И вфактическое действие, вам нужно установить код состояния ответа http на 1 и записать ошибку.например,

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

Наслаждайтесь:)

0 голосов
/ 15 декабря 2011

Возможно, вам стоит разобраться с этой ошибкой на уровне выше .jstree. Может быть, обработав событие window.onerror, вы сможете добиться этого. Здесь вы могли бы вызвать функцию, которая будет восстанавливать дерево или что-то? Обязательно включите этот скрипт в качестве первого на своей странице.

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