2011-12-01 58 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);' –