2

楽しみながら、JQuery と Django の両方を同時に学ぼうとしています。ブラウザベースの端末アプリケーションを書くのは気の利いたことだと思いました。

背景は次のとおりです。

私のコンソールページは次のようになります。

{% 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 でエラーを処理する必要があるのか​​ 疑問に思います-そのオブジェクトがどのように見え、どのように結果が得られるかわかりません。

正しい方向へのいくつかの指針は、私が学ぶのに役立ちます.

ありがとう、

マット

4

1 に答える 1

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();
            });
于 2013-12-20T18:22:30.500 に答える