1

AJAXを介してJSONとしてサーバーにデータを投稿すると、フォーム要素からの値は文字列(ユニコード)になります。簡単な例を次に示します。

<select id="test">
  <option value=1>One</option>
  <option value=2>Two</option>
  <option value=3>Three</option>
</select>

次のようにサーバーにデータを送信します。

$('test').change(function(){
  var id = $(this).val();
  $.ajax(
  {
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    url: someUrl,
    data: JSON.stringify(id:id),
    dataType: 'json',
    success: doSomething
  });

次に、サーバー(Pyramid 1.3.3)で:

log.debug(type(request.json_body['id']))与える<type 'unicode'>

if request.json_body['id'] == 2値は実際にはu'2'であるため、これによりコードはFalseのようになります。

私はid = int(request.json_body['id'])intであるはずのすべてのパラメータに対して実行してきましたが、より良い方法はありますか?明らかな何かが欠けているような気がします。

4

1 に答える 1

0

いいえ、これは正しいです。Webページのフォーム要素の値は、エンドユーザーが何を入力するかに関わらず、常に文字列です。

ただし、ザルを使用してサーバー側での変換を自動化することができます。スキーマを指定し、デコードされたJSONデータ構造を渡して、完全に検証された素敵なPython構造を取得します。

整数を逆シリアル化するための最も簡単な例:

>>> import colander
>>> id = colander.SchemaNode(colander.Integer())
>>> id.deserialize('1')
1

しかし、ザルはマッピング、シーケンス、ブール値、日時オブジェクトなどを処理できます。

于 2012-09-01T20:45:15.747 に答える