1

当我通过 AJAX 将数据作为 JSON 发布到服务器时,来自表单元素的值以字符串(unicode)的形式出现。这是一个简单的例子:

<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'] == 2False,因为该值实际上是 u'2'。

我一直在id = int(request.json_body['id'])为所有应该是整数的参数做,但是有更好的方法吗?我觉得我错过了一些明显的东西。

4

1 回答 1

0

不,这是正确的。无论您希望最终用户输入什么内容,网页中的表单元素值始终是字符串。

不过,您可以使用collander在服务器端自动进行转换。你指定一个模式,传入解码后的 JSON 数据结构,然后得到一个很好的 Python 结构,完全验证。

反序列化整数的最简单示例:

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

但是 colander 可以处理映射、序列、布尔值、日期时间对象等等。

于 2012-09-01T20:45:15.747 回答