【问题标题】:jQuery JsTree and JSON error handlingjQuery JsTree 和 JSON 错误处理
【发布时间】:2011-12-01 02:49:55
【问题描述】:

我正在使用 MVC 将 JSON 数据传递给 JsTree 并显示信息的分层视图。 一切正常,但是,有时用户无法访问数据或由于某种原因 MVC 操作引发异常:

在这些情况下,操作会传递 JSON 错误消息并将 HttpStatusCode 设置为 NotAcceptedInternalServerError

但是 jsTree 的罪人一直在旋转,我似乎没有找到让它停止并显示错误消息的方法。

以前有人解决过这个问题吗?使用 JsTree 的 JSON 数据插件如何进行错误处理?

更新:

我想出了如何捕获错误:

 $("#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 statusCode 和错误,现在我需要弄清楚如何告诉 JsTree 停止等待并删除微调器图像!

我也在寻找一种在 JsTree 中显示错误的好方法,还是应该在它之外管理错误消息?

【问题讨论】:

  • 进一步发现,是可以抓到错误的。
  • 我需要一个答案:)

标签: asp.net-mvc json jstree


【解决方案1】:

我已经解决了这个问题。

请注意——上面处理 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");

享受:)

【讨论】:

  • 正是我想要的。谢谢!
  • 我发现覆盖整个树的内容会阻止树在以后的刷新中工作。相反,我调整树中的内容以显示错误消息并删除加载文本,jstree 在后续刷新中正确替换:$('#YourTree .jstree-loading').removeClass('jstree-loading').find('.jstree-anchor').html('Error: ' + jqXHR.responseText);
【解决方案2】:

也许您应该考虑在 .jstree 上方的一个层中处理此错误。也许通过处理 window.onerror 事件,您可以实现这一点。在这里你可以调用一个函数来重建树或什么?请务必将此脚本作为您页面中的第一个脚本。

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

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多