2009-08-18 4 views
4

누군가 내가 여기서 잘못하고있는 것을 설명 할 수 있어야합니다! 나는 Google App Engine 앱에 AJAX 게시물의 가장 간단한 예제를 만들려고 노력하고 있는데 ... 실패하고 있습니다! 여기 Google App Engine + jQuery Ajax = 405 메소드가 허용되지 않습니다.

는 ... 왜 응용 프로그램 파이썬에게


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 오류가 계속 발생합니까?

나는이 것을 6 가지 다른 방법으로 다시 작성하여 작동하도록 만들었습니다 ... 할 수 없습니다! 지금까지 나는 http://blog.pythoughts.com/posts/AJAX-with-Google-App-Engine#jqueryAjax과 StackOverflow가 NO NO NO라고 말하기 때문에 링크를 게시 할 수없는 Google 코드의 AJAX RPC 기사에 대한 조언을 찾고 있습니다. 이 예제들 중 어느 것도 나를 위해 작동하지 않습니다.

내가 뭘 잘못하고 있니?

+0

당신은 자바 스크립트가 작동하지 않는 게시물을 확인할 수 있습니까? 그렇다면 동일한 URL에 아약스를 게시하고 동일한 데이터를 전달하고 있습니까? –

+1

jQuery 스 니펫 중 7 번째 줄에 쉼표가 추가되어 사용중인 브라우저에 따라 Javascript가 실패 할 수 있습니다. – bryan

+0

예, 여분의 쉼표는 붙여 넣기 중에 실수였습니다. – farina

답변

5

"동일한 출처 정책"이라고합니다. 이것이 로그에 OPTIONS 메소드가있는 이유입니다. Ajax 요청의 도메인과 프로토콜은 실행중인 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] "옵션/HTTP/1.1 추가"405 124 - "Mozilla/5.0 (Windows NT; rv : 1.9.1.2) Gecko/20090729 Firefox/3.5.2, gzip (gfe) " gzip (gfe)은 무엇을하고 있습니까? – farina

+0

인프라에서 gzip (gfe)이 추가되었습니다. 그러나 'OPTIONS'방법을주의하십시오. 당신이하고있는 일은 당신이 당신의 클래스에 정의하지 않은 OPTIONS 메소드를 사용하려고 시도하는 것입니다. –

0

대신 : 애플리케이션 webapp.WSGIApplication = ([('/', 이메일 목록)])

보십시오 애플리케이션 webapp.WSGIApplication = ([ ". *"(이메일 목록)])

또한 JS의 데이터 매개 변수가 사전이되어야합니까? like : var data = { 'email': $ F ('email_field_name')}

3

저는 Google App Engine AJAX example에 jQuery를 포함 시켰습니다. doAdd() 및 맞춤 AJAX 자바 스크립트를 다음으로 바꿉니다.

<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