【问题标题】:jquery.ajax post request to get data from app engine serverjquery.ajax 发布请求以从应用引擎服务器获取数据
【发布时间】:2011-08-25 02:24:46
【问题描述】:

为这个菜鸟问题道歉......

您好,我如何使用 jQuery.ajax 从 appengine 服务器的 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 代码,那就太好了......

【问题讨论】:

  • 为什么在将值存储到数据存储区之前使用cgi 转义值?

标签: jquery python ajax google-app-engine


【解决方案1】:

无论数据流向何种方式,机制都是完全相同的。请求成功完成后,在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

【讨论】:

  • 嗯...我不断收到 POST localhost:8110/resultshandler500(内部服务器错误)。我尝试做 output = {'salary':500} 但在成功功能下没有运气和警报(数据)但没有运气......
  • 不要忘记 json 编码。粘贴您的代码,我可能会提供帮助。
  • 你在服务器上遇到了什么错误?检查 python 堆栈跟踪的日志。
  • 啊,原来我假设 python 2.6 运行时支持 json.dumps。我使用 simplejson.dumps 函数修复了它。感谢专门的一对一支持:D
  • 更新,我收到“未捕获的类型错误:无法读取 null 的“薪水”属性。网络工作者在 chrome 中工作正常,但会引发此错误,而在 Firefox 中则根本不工作。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
相关资源
最近更新 更多