jQuery.ajax POST 请求从应用引擎服务器获取数据

2 投票
1 回答
6279 浏览
提问于 2025-04-17 00:18

首先抱歉问了个新手问题...

你好,我想知道如何通过jQuery.ajax从应用引擎服务器的Python端获取数据。我知道如何使用ajax和合适的处理程序将数据发送到服务器,但我想知道获取服务器值的ajax请求应该是什么样子的。(假设我想从数据存储中获取一个数字,并在JavaScript中使用它)。

客户端发送到服务器(使用jQuery)

客户端的JavaScript代码:

//jQuery and ajax function loaded.

<script type="text/javascript">
    var data = {"salary":500};
    $.ajax({
    type: "POST",
    url: "/resultshandler",
    data: data
</script>

服务器端:

class ResultsHandler(webapp.RequestHandler):
    def get(self):
        n = cgi.escape(self.request.get('salary'))
        e = Engineer(salary = n)
        e.put()

在def main():下面,我有处理程序('/put_in_datastore', ResultsHandler)

那么,从Python端获取数字的类似代码是什么呢?如果有人能提供处理程序代码和JavaScript代码,那就太好了...

1 个回答

9

无论数据是怎么流动的,机制都是一样的。在ajax调用中使用success参数,这样在请求成功完成后就可以对数据进行操作。这通常被称为回调。还有其他类型的回调,想了解更多可以查看http://api.jquery.com/jQuery.ajax/

$.ajax({
  url: "/resultshandler",
  type: 'POST',
  data: data,
  success: function(data, status){
    //check status
    //do something with data
  }
});

在Python这边,你可以用self.response.write.out(output)来返回数据。下面有个例子。

class ResultsHandler(webapp.RequestHandler):
    def post(self):
        k = db.Key.from_path('Engineer', the_engineer_id) #will be an integer
        e = db.get(k)
        output = {'salary': e.salary}
        output = json.dumps(output) #json encoding
        self.response.write.out(output)

另外,你的URL路由应该像这样('/resultshandler', ResultsHandler)。我不太清楚/put_in_datastore是从哪里来的。

最后,注意这里用的是def post而不是def get,因为我用JavaScript发起的是一个POST请求。如果你想用GET请求,也可以这样做,那时候就用def get

撰写回答