0
var body = JSON.stringify(params);

// Create an XMLHttpRequest 'POST' request w/ an optional callback handler
req.open('POST', '/rpc', async);

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", body.length);
req.setRequestHeader("Connection", "close");

if (async) {
  req.onreadystatechange = function() {
    if(req.readyState == 4 && req.status == 200) {
      var response = null;
      try {
        response = JSON.parse(req.responseText);
      } catch (e) {
        response = req.responseText;
      }
      callback(response);
    }
  };
}

// Make the actual request
req.send(body);

---- サーバー側 ----

class RPCHandler(BaseHandler):        
'''@user_required'''
def post(self):
    RPCmethods = ("UpdateScenario", "DeleteScenario")
    logging.info(u'body ' + self.request.body)
    args = simplejson.loads(self.request.body)

---- サーバー ログ本体で次のエラーを取得 %5B%22UpdateScenario%22%2C%22c%22%2C%224.5%22%2C%2230frm%22%2C%22Refinance%22%2C%22100000%22% 2C%22740%22%2C%2294538%22%2C%2250000%22%2C%22owner%22%2C%22sfr%22%2C%22フリーモント%22%2C%22CA%22%5D=

JSON オブジェクトをデコードできませんでした: 行 1 列 0 (文字 0): トレースバック (最新の呼び出しが最後): ファイル "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py",行 703、呼び出し handler.post(*groups) ファイル「/base/data/home/apps/s~mortgageratealert-staging/1.357912751535215625/main.py」、行 418、ポスト args = json.loads(self.request .body) ファイル "/base/python_runtime/python_lib/versions/1/simplejson/ init.py"、388 行目、ロード return _default_decoder.decode(s) ファイル "/base/python_runtime/python_lib/versions/1/simplejson/decoder.py"、402 行目、デコード obj、end = self.raw_decode(s , idx=_w(s, 0).end()) ファイル "/base/python_runtime/python_lib/versions/1/simplejson/decoder.py"、420 ​​行目、raw_decode で JSONDecodeError("JSON オブジェクトをデコードできませんでした" 、s、idx) JSONDecodeError: JSON オブジェクトをデコードできませんでした: 行 1 列 0 (文字 0)

--- firebug は次のように表示されます ---

パラメータ application/x-www-form-urlencoded ["UpdateScenario","c","4....
Source ["UpdateScenario","c","4.5","30frm","Refinance","100000" ,"740","94538","50000","所有者","sfr","フリーモント","CA"]

firebug レポートとログに基づいて、予想どおり self.request.body が表示されます。ただし、simplejson の読み込みは気に入りません。

助けてください!

4

2 に答える 2

2

2 つのオプション:

self.request.body の内容をエスケープする必要があるようです。

urllib をインポートし、サンプルのコードの最後の行を次のように変更します。

args = simplejson.loads(urllib.unquote(self.request.body))

または、この他のオプションを試すことができます: POST 本文で完全な json 文字列を送信しています。JavaScript に次の行を含める必要がない場合があります。

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

それを取り出して、上記の urllib.unquote ソリューションをまだ使用する必要があるかどうかを確認してください。

于 2012-04-02T05:02:07.217 に答える
0

JSON コンテンツは送信しません。このヘッダーを追加する必要があります: contentType: 'application/json'

于 2012-04-02T23:25:57.037 に答える