2011-12-01 145 views
9

我正在使用MVC将JSON数据传递给JsTree并显示信息的分层视图。 一切工作正常,但是,有些时候用户没有访问数据或由于某种原因MVC操作抛出异常:jQuery JsTree和JSON错误处理

在这些情况下,操作传递JSON错误消息并设置HttpStatusCodeNotAcceptedInternalServerError

然而,jsree的罪人不断旋转,我似乎没有找到一种方法,使其停止并显示错误信息。

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

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

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

+0

进一步发现,它可以捕捉到错误。 – sam360

+0

我需要这个答案:) –

回答

0

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

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

我已经解决了这个问题。

只是一个笔记记录上述处理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

正是我在找什么。谢谢! –

+0

我发现覆盖整个树的内容会阻止树在将来的刷新中工作。相反,我调整了树中的内容以显示错误消息并删除加载文本,该文本在随后的刷新中被jstree正确替换: '$('#YourTree .jstree-loading')。removeClass('jstree-loading' ).find('。jstree-anchor')。html('Error:'+ jqXHR.responseText);' –