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

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!")