2013-12-12 35 views
2

只是有一些樂趣,並試圖同時學習JQuery和Django。我認爲編寫基於瀏覽器的終端應用程序會很好用。使用JQuery Terminal Plugin和Django與jsonrpc處理錯誤

這裏的背景:

我的控制檯頁面看起來像這樣:

{% load staticfiles %} 
<!DOCTYPE HTML> 
<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
    <script src="{% static "goat/jquery.terminal-0.7.10.min.js" %}"></script> 
    <link rel="stylesheet" type="text/css" href="{% static "goat/jquery.terminal.css" %}"> 
    </head> 
<body> 
    <div id="term"></div> 
<script> 
jQuery(function($) { 
    $('#term').terminal("http://goatgruff.com/json/", { 
     greetings: "Menu: (R)egister (L)ogin"}); 
}); 

</script> 
</body> 
</html> 

我的json views.py使用與json-rpc相同的示例...

from jsonrpc import jsonrpc_method 

    @jsonrpc_method('sayHello') 
    def whats_the_time(request, name='Lester'): 
     return "Hello %s" % name 

    @jsonrpc_method('gimmeThat', authenticated=True) 
    def something_special(request, secret_data): 
     return {'sauce': ['authenticated', 'sauce']} 

很酷。所以問題:

當我在我的終端鍵入「sayHello Matt」時,Ajax調用起作用,並以「Hello Matt」作爲響應。只是很迷人。但是如果我輸入一個不在views.py中的方法,我會得到一個醜陋的AJAX錯誤。

我想很好地處理這個錯誤,並告訴用戶沒有方法。因爲我必須在視圖中命名方法,所以我不能在那裏有一個錯誤處理程序。我想知道是否應該在urls.py中加入try/catch,或者我的JQuery應該通過解析返回的內容來處理錯誤 - 我不確定那個對象是什麼樣子的,以及如何得到結果。

正確方向的幾個指針會幫助我學習。

感謝,

馬特

+0

你從python中得到什麼樣的JSON,哪裏沒有方法? – jcubic

回答

1

好吧,我想通了我自己。首先我開始在jsonrpc中的exceptions.py文件中瞎搞。但不是重寫來自jsonrpc的錯誤消息,而是從JQuery終端做出簡單的錯誤響應似乎更好。所以我只是評論了更多的信息反饋,並返回了一個通用的「無效命令」,以避免用戶看到他們不理解的冗長內容。

 function make_basic_json_rpc_interpreter(url) { 
     var service = function(method, params) { 
      self.pause(); 
      $.jrpc(url, method, params, function(json) { 
       if (!json.error) { 
        display_object(json.result); 
       } else { 
        self.error('&#91;RPC&#93; ' + json.error.message); 
       } 
       self.resume(); 
      }, function(xhr, status, error) { 
       if (status !== 'abort') { 
        //self.error('&#91;AJAX&#93; ' + status + 
        //    ' - Server reponse is: \n' + 
        //    xhr.responseText); 
        self.error('Invalid Command'); 
       } 
       self.resume(); 
      }); 
+0

我添加了回調函數:'onAjaxError','onRPCError'和'processRPCResponse',您可以在其中指定要如何顯示RPC結果。 – jcubic