Google App Engine + jQuery Ajax = 405方法不允许

有人必须能够解释我在这里做错了什么! 我正在尝试为Google App Engine应用程序创建最简单的AJAXpost示例…而且我失败了!

这是应用程序python


import cgi from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext import db from django.utils import simplejson class EmailItem(db.Model): email = db.StringProperty(multiline=False) date = db.DateTimeProperty(auto_now_add=True) class EmailList(webapp.RequestHandler): def get(self): self.response.out.write("You see nothing!") def post(self): eitem = EmailItem() eitem.email = self.request.get("address") eitem.put() self.response.out.write("success") application = webapp.WSGIApplication([('/', EmailList)]) def main(): run_wsgi_app(application) if __name__ == "__main__": main() 

这是jQuery


 $.ajax({ type: "POST", url: "myappengineURL", data: "address=" + sVerifiedEmail, success: function(msg) { alert("Data Saved: " + msg); }, }); 

假设我实际上知道如何使用jQuery并调用AJAX调用…为什么我一直得到405错误?

我已经用这六种不同的方式重写了这个东西,试图让它发挥作用……我做不到! 到目前为止,我正在查看来自http://blog.pythoughts.com/posts/AJAX-with-Google-App-Engine#jqueryAjax和Google代码的AJAX RPC文章的建议,我无法发布链接,因为StackOverflow说不不不。 这些例子似乎都不适合我。

我究竟做错了什么?

您的问题被称为“同源政策”。 这就是您在日志中看到OPTIONS方法的原因。 您的Ajax请求的域和协议必须与您从中启动它的域和协议相同。

这是同样的问题和良好的答案。

我已将jQuery合并到Google App Engine AJAX示例中 。 用以下内容替换他们的doAdd()和自定义AJAX javascript:

    

适合我! 希望能帮助到你。

 $.ajax({ type: "POST", url: "myappengineURL", data: ({address : sVerifiedEmail}), success: function(msg) { alert("Data Saved: " + msg); }, }); 

如上所述构建通话时会发生什么?

  • 检查App Engine上的日志。 指定了什么方法,URL是什么?
  • 尝试使用Curl或Wget进行POST。 那样有用吗?

而不是:application = webapp.WSGIApplication([(’/’,EmailList)])

尝试:application = webapp.WSGIApplication([(’。*’,EmailList)])

另外,JS中的数据参数不需要是字典吗? 喜欢:var data = {’email’:$ F(’email_field_name’)}

所有其他答案都是愚蠢的。

你想发帖而不是获取。 应该说:

 class EmailList(webapp.RequestHandler): def post(self): self.response.out.write("You see nothing!")