【问题标题】:How to pass json via a form element如何通过表单元素传递 json
【发布时间】:2011-01-28 00:46:40
【问题描述】:

我有这个 swf (flash) 文件,它提供了需要发送到服务器的 json。

我写了一个非常简单的jQuery:

function submitForm(swf_json) {
$('#swfjson').val(swf_json); #swfjson is an input of type hidden
$('#titleForm').submit();
}

swf 会调用上面的 submitForm,我会像往常一样在 django 中收到 request.POST。

但是,django 将swf_json 解释为字符串"Object object"

    >>>type(request.POST['swfjson'])
    <type 'unicode'>

当然,我可以将 json 作为字符串传递给视图函数。对我来说似乎不太好。将 json 对象传递给 django 视图的任何其他方式?

【问题讨论】:

    标签: jquery django json flash


    【解决方案1】:

    您必须首先使用 https://github.com/douglascrockford/JSON-js 之类的库将您的 JavaScript 对象“序列化”为 JSON 字符串(JQuery 中没有内置适当的函数。)

    【讨论】:

      【解决方案2】:

      当然,django 会看到字符串“Object object”。这正是 jQuery 写入输入字段的内容。以及随后提交的内容。 (Demo)

      swf_json 参数是 javascript 的对象。如果您想将其作为字符串提交,我建议稍微修改 swf,以便将字符串而不是 json 对象传递给您的函数。假设您通过字符串连接构建 json,只需在末尾和开头添加额外的引号,然后再调用 submitForm

      代替

      {
        "firstName": "John",
        "lastName": "Smith"
      } //json object
      

      试试这个

      '{
        "firstName": "John",
        "lastName": "Smith"
      }' //string
      

      如果我没记错的话https://github.com/douglascrockford/JSON-js/blob/master/json2.js 允许在 json 和字符串之间进行转换

      【讨论】:

      • 谢谢,我就是这么想的。简单地传递字符串。但是我从 swf 收到一个 json,我如何在 javascript 中将它转换成一个字符串。
      • 检查扩展答案(最后)
      【解决方案3】:

      试试jQuery函数post

      $.post("your/url/", 
             {"id":id}, 
             function(data){},
             "json");
      

      【讨论】:

      • 我认为这不会解决问题,因为它仍然会发送一个 json 对象。
      【解决方案4】:

      作为 jitter 答案的替代方案,为什么不简单地使用 Python 的 json library 解析 json 对象。这样您就不需要手动解析字符串。作为一个额外的好处,如果您的客户决定通过 json 对象传递多个值,它更具前瞻性。

      【讨论】:

      • 设置输入值并提交该表单比使用 ajax 帖子更简单。这种方式阻碍了我的开发,因为我无法在 python 测试中创建 json 对象。
      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2021-03-13
      • 2023-03-22
      • 2021-05-24
      • 1970-01-01
      相关资源
      最近更新 更多