【问题标题】:GoogleAppEngine JSON object using javascript使用 javascript 的 GoogleAppEngine JSON 对象
【发布时间】:2010-08-02 07:37:55
【问题描述】:

我想创建一个包含数组的字典并使用 jquery 的 ajax 请求将其发送到 GAE。 像我手动创建的{'a':'text', 'b':'othertext','c':['texta','textb']} 之类的东西。 我能够在 GAE 上使用 self.request.get 而不是 c 接收和处理 a 和 b。

还有其他方法可以在 js 中创建 JSON 对象吗?请建议这种方法有什么问题。

【问题讨论】:

  • 您使用什么 jQuery 代码发送请求?我对 Python GAE 了解不多,但似乎 request.get 处理的是普通的 GET 和 POST 参数,而不是 JSON 属性

标签: javascript json google-app-engine


【解决方案1】:

您并没有真正将 JSON 发送到服务器。当您将对象传递给jQuery.ajax(或get/post 包装器)时,它将被序列化为 GET 或 POST 变量,而不是作为 JSON 发送,因此您的对象将被转换为如下内容:

a=text&b=othertext&c[]=texta&c[]=textb

如果您想将整个对象作为 JSON 传递,您可以通过调用 JSON.stringify 自行转换(对于原生不支持 JSON 对象的浏览器,您需要包含 json2.js)。然后你可以用你想要的任何名称将 JSON 编码的字符串包装在一个地图中:

jQuery.post(url, { json: JSON.stringify({a:'text', ...}) }, ...);

在服务器端,您可以通过调用 self.request.get("json") 来访问 JSON 文本。然后,您必须解析 JSON 字符串以提取值。我对 Python 不太了解,但显然你只需要导入 django.utils.simplejson 并调用 simplejson.loads(json)

【讨论】:

  • 我明白你的意思,但大卫的解决方案对我有用,+1 为你的详细回答。非常感谢您的帮助。
【解决方案2】:

大概GAE的self.request.get无法将字符串数组这样的复杂对象序列化为GET请求格式(?a=text&b=othertext...)。

一种解决方法,虽然可能不是一个非常简洁的解决方法,但是您自己将值序列化为 JSON,然后将其传递:

var jsonObj = {
               'a':'text', 
               'b':'othertext', 
               'cJSON': JSON.stringify(['texta', 'textb'])
              };

...当然你必须在接收端反序列化cJSON

【讨论】:

    【解决方案3】:

    您实际上是在发送 urlencoded 请求参数,而不是 JSON。 JQuery 可能将列表编码为同一参数的多个值,这意味着您可以使用 self.request.get_all 访问它,这将返回一个列表 - self.request.get 将只返回第一个值。

    【讨论】:

    • 嗨尼克,我尝试了 get_all,但是当我发送 'c':['texta','textb'] 时它不起作用
    • @Cool:这并不重要,因为你已经让它工作了,但是如果你这样称呼它get_all 可能会工作:self.request.get_all("c[]")。默认情况下,jQuery 使用 PHP 的约定将 '[]' 放在末尾,将参数视为数组。
    猜你喜欢
    • 2023-04-09
    • 2021-08-05
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2012-03-22
    相关资源
    最近更新 更多