【问题标题】:How to receive JSON via jQuery.ajax on Google App Engine如何在 Google App Engine 上通过 jQuery.ajax 接收 JSON
【发布时间】:2013-09-26 22:45:14
【问题描述】:

我正在构建一个 Google 表单克隆,它将创建一个表单,然后将其存储在服务器中。表单生成器输出此 JSON.stringify 格式:

{"method":"post","action":"/test","html":[{"input_type":"input_text","caption":"What is your name?"},{"input_type":"radio","caption":"What is the name of your dog?","options":{"benny":"Benny","billy":"Billy","bobby":"Bobby"}}]}

我正在尝试将其发送到我的 App Engine 后端,如下所示:

$.ajax({
    type: "POST",
    url: save_url,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: json_string,
    success: function (e) {
        console.log(e);
    }
});

但是我如何在我的服务器上“打开”这个 json 字符串,以便我可以将它插入到我的数据库中?

第一个问题:我应该使用self.request.body 来获取数据对象(json 字符串),还是有更好的方法来获取它。现在我已经对字符串进行解码以获得正确的格式。

def post(self):
    form_elements = json.loads(urllib.unquote_plus(self.request.body))
    self.write(form_elements)

第二个问题:使用json.loads解析json字符串,报错:ValueError: No JSON object could be decoded为什么不明白是json?

【问题讨论】:

  • 如果我理解正确,该问题的最佳答案是使用 json 库并使用 json.loads 函数,但正如我在问题中提到的那样,这就是我已经使用
  • 你能显示生成javascript变量json_string的代码吗?您是否尝试过记录 self.request.body 的样子?我怀疑您实际上并没有发送 json 字符串。
  • @dragonx 你是对的,我已经对我放入 console.log 的内容进行了字符串化,但没有对我发送到 ajax 函数的内容进行字符串化;)仍然是 self.request.body 获取数据的最佳方式?
  • 是的 self.request.body

标签: python json google-app-engine jquery


【解决方案1】:

这就是我所做的,从工作代码中提取并剥离到基本部分。

  var blob = JSON.stringify(stuff);
  $.ajax('/api/', {
    'type': 'POST',
    'async': false,
    'data': {
      'json': blob,
     },
     'dataType': 'json',
  }).done(function(data) {
    // ...
  }


def post(self):
    blob = self.request.get('json')
    try:
        stuff = json.loads(blob)
    except:
        # ...

我没有尝试使用整个request.body

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2011-05-13
    • 1970-01-01
    • 2019-03-26
    • 2011-05-05
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多