2011-11-16 13 views
4

トルネードWebサーバにjqueryの経由JSONRPC 2.0呼び出しが 「200 OK」のhttpレスポンスと私のネットワークスニファがjQuery jsonrpc 2.0 .ajax()経由の呼び出しは正しい応答を返しますが動作しませんか?

{「JSONRPC」を含むとしてデコード 応答を示しています:「2.0」、「エラー」 :null、 "result":3500、 "id": "jsonrpc"}

つまり有効なjsonrpc 2.0レスポンス。 3500も正しい結果です。 RPCが単純な追加機能になっています。

ファイヤーバグは応答を表示せず、.ajax 成功コールバック はトリガーされません。 .ajax()エラー完了コールバックは ですが、この問題については私には何の手がかりも与えません。ここでは、ajax()呼び出しをトリガーする index.htmlがあります。私はここでの問題は、Firefoxのではなく、私のWebサーバが(http://localhost:8080を参照して)私にindex.htmlをを届ける持つの「オープン・ファイル」を使用してのindex.htmlを開いたこと

を考え出し

$(document).ready(function(){ 
     $.ajax({ 
      url: 'http://localhost:8080', 
      data: JSON.stringify ({jsonrpc:'2.0',method:'add', params:[1400,2100],id:"jsonrpc"}), // id is needed !! 
      type:"POST", 
      dataType:"json", 
      success: function (result) { 
       alert("ok"); 
      }, 
      error: function (err,status,thrown) { 
       alert ("this syntax sucks!! " + " ERROR: " + err + " STATUS: " + status + " " + thrown); 
      }, 
      complete: function (xhr,status) { 
       alert('Complete=> showing status as: '+ status); 
       data = $.parseJSON(xhr.responseText); 
       alert (data); 
      } 
     }); 
    }); 
+0

エラーの状態とエラーは何ですか?完了しましたか? – Nakul

+0

私はそれを理解しました。 – Martin

+0

元々は、「File Open」というFirefoxを使って上記のindex.htmlをロードしていました。これを行う代わりに、http:// localhost:8080を閲覧したときに私のTornado Webサーバーで配信していました。これで問題は完全に解決されました。成功がトリガーされ、正しいリモートプロシージャコールの結果が得られます。 – Martin

答えて

5

が完了作業ですJSON RPC呼び出しを作成し、単純なアラートを使用して結果を表示する例RPCは基本的な追加機能です。

  • 保存index.htmlを(2)とwebserver.py(1):アクションでそれを見るために

    。 に編集webserver.pyはindex.htmlを

  • スタートwebserver.py(。のchmod A + X webserver.py須藤./webserver.py)

  • スタートのFirefoxのロケーションを反映し、ローカルホストを参照:8080 。これはindex.htmlをロードし、 はajax()呼び出しをトリガし、アラートを使用して結果を表示します。

(1)Webサーバーはtornadorpcモジュールを使用しており、Pythonで書かれています。ここでは、次のとおりです。

#! /usr/bin/python2.6 

import tornado.httpserver import tornado.ioloop import tornado.web 

from tornadorpc.json import JSONRPCHandler from tornadorpc import private, start_server 


class MainHandler(tornado.web.RequestHandler): 
    def get(self,upath): 
     self.write(open('/home/travis/EXPLORE/webApps/index.html').read())    

class Tree(object): 

    def power(self, base, power, modulo=None): 
     return pow(base, power, modulo) 

    def _private(self): 
     # Won't be callable 
     return False 

class Handler(JSONRPCHandler): 

    print ('In Handler()...') 
    tree = Tree() 

    def add(self, x, y): 
     print ('add() method called...') 
     return x+y 

    def ping(self, obj): 
     return obj 

# Order is important here.. first matched handler in array is used !! handlers = [ 
      ('/RPC2',Handler), 
      (r"/(.*)", MainHandler), 

      ] 

start_server(handlers, port=8080) 

(2)のindex.htmlを追加し、リモート・プロシージャにJSONRPC呼び出しを行うためにjQueryのAJAX()メソッドを使用しています。 (1)のWebサーバーがその内容を読み込もうとするパスと一致するように保存する場所を確認してください。

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script> 

    <script> 
     $(document).ready(function(){ 

     $.ajax({ 
      url: 'http://localhost:8080/RPC2', 

      data: JSON.stringify ({jsonrpc:'2.0',method:'add', params:[1400,2100],id:"jsonrpc"}), // id is needed !! 

      type:"POST", 

      dataType:"json", 
      success: function (data)  { alert("The result is : " + data.result);}, 
      error: function (err) { alert ("Error");} 

     }); 

     }); 


    </script> 


</head> 
<body> 
    <h1> jQuery JSON RPC 2.0 demo </h1> 

</body> 
</html> 
関連する問題