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

时间:2009-08-18 06:22:38

标签: jquery ajax google-app-engine

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

这是app 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说NO NO NO。这些例子似乎都不适合我。

我做错了什么?

6 个答案:

答案 0 :(得分:5)

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

Here's the same question with good answers.

答案 1 :(得分:3)

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

<script language="javascript" src="./static/jquery.js"></script>
<script language="javascript" src="./static/json2.js"></script>
<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)); }
            );
    }
</script>

适合我!希望它有所帮助。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  • 检查App Engine上的日志。什么 方法正在指定,什么是 网址?
  • 尝试使用Curl或 wget的。这有用吗?

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:-1)

所有其他答案都很愚蠢。

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

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