使用Google App Engine(Python)进行jQuery Post并返回数据(json、xml等)
我已经成功使用 jQuery 发送了 POST 请求。不过,我想知道如何从服务器那边获取返回的数据。有没有人能给我一个例子,说明在 Google App Engine(使用 Python 的 webapp 框架)中该怎么做?
如果可以的话,我需要以下几个例子的说明:
- 我们如何将 JSON 数据发送到模板。
- 在模板中,如何在 jQuery POST 成功的函数里访问这个 JSON 数据。
- 如果有人能把这些内容发到 http://jsfiddle.net 上,我会非常非常感激。
3 个回答
让我们简单了解一下JSON:
data_json = []
这行代码是用来创建一个空的数组。data_json.append({ 'data1': first-item, 'data2': second-item, ...})
- 你可以根据需要添加任意多的数据。output = json.dumps(data_json)
这行代码是用来生成JSON格式的输出。self.response.out.write(output)
这行代码则是把生成的输出写出来。
为了避免跨域问题,你需要在输出中加上一个回调函数,这种方式叫做JSON/P。具体做法是用 padded_output = callback_fn + "(" + output + ")"
,其中 callback_fn
是用户发送的回调函数(通常是用jQuery生成的)。
首先,了解一下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上贴出代码来回答。
我其实是在找一个方法,想知道怎么把服务器端的Json对象返回到我写的jQuery ajax post里。
所以,我发现之前的解决方案出了点问题:
因此,解决办法其实很简单:
$.post("POST_URL", $("#form").serialize(),
function(data){
alert(data); //data returned from server side
}, "json");
我犯了两个错误:
- 之前我把最后一个参数“json”给忽略掉了。
- 在导入了django.utils.simplejson作为json后,我犯了一个小错误,使用了simplejson.dumps而不是json.dumps。(也就是说,用了错误的变量)