Google App Engine + jQuery Ajax = 405 Method Not Allowed
有人必须能够解释我在这里做错了什么! 我正在尝试为Google App Engine应用程序创建一个最简单的AJAX帖子示例...而且我失败了!
这是app python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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
1 2 3 4 5 6 7 8 | $.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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <script language="javascript" src="./static/jquery.js"> <script language="javascript" src="./static/json2.js"> <script language="javascript"> function doAdd() // Requests server to add two numbers, loads server response to result { $.get( '/rpc', {"action" :"Add", "arg0" : JSON.stringify($("#num1").val()), "arg1" : JSON.stringify($("#num2").val())}, function(response) { $('#result').val(JSON.parse(response)); } ); } |
适合我!希望能帮助到你。
代替:
application = webapp.WSGIApplication([('/',EmailList)])
尝试:
application = webapp.WSGIApplication([('。*',EmailList)])
另外,JS中的数据参数不需要是字典吗?喜欢:
var data = {'email':$ F('email_field_name')}
-
检查App Engine上的日志。什么
方法正在指定,什么是
网址? -
尝试使用Curl或者POST
wget的。那样有用吗?
1 2 3 4 5 6 7 8 | $.ajax({ type:"POST", url:"myappengineURL", data: ({address : sVerifiedEmail}), success: function(msg) { alert("Data Saved:" + msg); }, }); |
如上所述构建通话时会发生什么?
所有其他答案都是愚蠢的。
你想发帖而不是得到。应该说:
1 2 3 | class EmailList(webapp.RequestHandler): def post(self): self.response.out.write("You see nothing!") |