2009-08-18 7 views
4

ここで間違っていることを誰かが説明できる必要があります。私は、Google App EngineアプリへのAJAX投稿のMOSTの簡単な例を作成しようとしています...そして、私は失敗しています!ここでGoogle App Engine + jQuery Ajax = 405メソッドが使用できない

は、アプリの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呼び出しを起動する方法を知っていると仮定すると、jQueryの


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

はなぜ...です私は405エラーを取得し続けますか?

私はこのことを6つの異なる方法で書き直して、動作させようとしています...できません!これまで私はhttp://blog.pythoughts.com/posts/AJAX-with-Google-App-Engine#jqueryAjaxとGoogleコードのAJAX RPC記事からアドバイスを探していますが、StackOverflowにはNO NO NOと表示されているため、リンクを投稿できません。これらの例のどちらも私のためには役に立たないようです。

私は間違っていますか?

+0

あなたは、JavaScriptが動作しないポストが確認できますか?もしそうなら、あなたのajaxは同じURLに投稿して、同じデータを渡していますか? –

+1

jQueryスニペットの7行目に余分なカンマがあります。使用しているブラウザによってはJavascriptが失敗する可能性があります。 – bryan

+0

はい、余分なコンマは貼り付け中の間違いでした。 – farina

答えて

5

あなたの問題は「同じ発信元ポリシー」として知られています。このため、ログにOPTIONSメソッドが表示されます。 Ajaxリクエストのドメインとプロトコルは、起動しているドメインと同じでなければなりません。

Here's the same question with good answers.

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

上記のようにコールを構成するとどうなりますか?

+0

同じこと... 405メソッドが許可されていません。 – farina

0
  • App Engineのログを確認します。どのような メソッドが指定されていますか?URLは とは何ですか?
  • Curlまたは WgetでPOSTを試してください。それは動作しますか?
+0

POSTでは動作しません。私は現時点でURLを共有することはできません...私はダミーサイトを設定しようとします。 – farina

+1

これは奇妙なログ項目ですか? 24.251.73.63 - - [17/Aug/2009:22:43:59 -0700] "OPTIONS/add HTTP/1.1" 405 - "Mozilla/5.0(Windows; U; Windows NT 6.1; rv:1.9.1.2)Gecko/20090729 Firefox/3.5.2、gzip(gfe) " ここでgzip(gfe)は何をしていますか? – farina

+0

インフラストラクチャによってgzip(gfe)が追加されました。しかし、メソッド - 'OPTIONS'に注意してください。あなたがやっていることは、クラスで定義していないOPTIONSメソッドを使用しようとしていることです。 –

0

代わりの: 応用= webapp.WSGIApplication([( '/'、EmailList)])

試み: アプリケーション= webapp.WSGIApplication([ '*'(EmailList)])

また、JSのデータパラメータは辞書である必要がありますか? var data = {'email':$ F( 'email_field_name')}

3

私はGoogle App Engine AJAX exampleにjQueryを組み込みました。その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> 

作品を私のために!それが役に立てば幸い。

-1

他のすべての答えは愚かでした。

getの代わりに投稿が必要です。それは言うべきです:

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

!(これは素晴らしい回答です!+1) – 0xc0de

関連する問題