使用Google App Engine(Python)进行jQuery Post并返回数据(json、xml等)

2 投票
3 回答
829 浏览
提问于 2025-04-17 06:14

我已经成功使用 jQuery 发送了 POST 请求。不过,我想知道如何从服务器那边获取返回的数据。有没有人能给我一个例子,说明在 Google App Engine(使用 Python 的 webapp 框架)中该怎么做?

如果可以的话,我需要以下几个例子的说明:

  1. 我们如何将 JSON 数据发送到模板。
  2. 在模板中,如何在 jQuery POST 成功的函数里访问这个 JSON 数据。
  3. 如果有人能把这些内容发到 http://jsfiddle.net 上,我会非常非常感激。

3 个回答

2

让我们简单了解一下JSON:

  1. data_json = [] 这行代码是用来创建一个空的数组。
  2. data_json.append({ 'data1': first-item, 'data2': second-item, ...}) - 你可以根据需要添加任意多的数据。
  3. output = json.dumps(data_json) 这行代码是用来生成JSON格式的输出。
  4. self.response.out.write(output) 这行代码则是把生成的输出写出来。

为了避免跨域问题,你需要在输出中加上一个回调函数,这种方式叫做JSON/P。具体做法是用 padded_output = callback_fn + "(" + output + ")",其中 callback_fn 是用户发送的回调函数(通常是用jQuery生成的)。

3

首先,了解一下json模块。原生的json模块在appengine上是不能用的,所以你需要这样做:

import django.utils.simplejson as json

接下来,把你想要转换成“json”的对象格式化为Python字典,

obj = {"name": "foo", "age": 20}

然后使用json.dumps来获取一个字符串对象,这个字符串代表了你的JSON对象。

json_obj = json.dumps(obj)

在这里,json_obj是一个字符串,所以你可以用普通的方法来写它。(可以在交互式解释器中试试)

之后,阅读一下这个页面,了解一下webapp框架中的模板信息(我用的是Django,不确定webapp是否使用相同的模板系统——虽然看起来很像,最好还是多了解一下)

如果你在说jQuery的AJAX POST请求,你需要在服务器端生成(X)HTML/XML/其他格式的内容,除非你是让某个POST请求的URL在iframe中加载。

如果这没有回答你的问题,可以稍微澄清一下你的问题。而且我觉得很不可能有人会在jsfiddle上贴出代码来回答。

1

我其实是在找一个方法,想知道怎么把服务器端的Json对象返回到我写的jQuery ajax post里。

所以,我发现之前的解决方案出了点问题:

因此,解决办法其实很简单:

$.post("POST_URL", $("#form").serialize(),
        function(data){
             alert(data); //data returned from server side
        }, "json");

我犯了两个错误:

  1. 之前我把最后一个参数“json”给忽略掉了。
  2. 在导入了django.utils.simplejson作为json后,我犯了一个小错误,使用了simplejson.dumps而不是json.dumps。(也就是说,用了错误的变量)

撰写回答