簡體   English   中英

如何使用JavaScript XMLlhttpRequest發送POST請求到Google App Engine?

[英]How to send a POST request with JavaScript XMLlhttpRequest to Google App Engine?

我想將JavaScript XMLlhttpRequest發送到Google App Engine上的.py腳本。 但我不是在尋找jQuery解決方案

HTML:

<form action="javascript:sendMessage();">
    <b>User:</b>
    <input value="" name="user" id="user">
    <br>
    <b>Comment here:</b>
    <div>
        <textarea id="message" name="message" rows="3" cols="60"></textarea>
    </div>
    <input type="submit">
</form>
<div id="result"></div>

JavaScript:

<script type="text/javascript" language="javascript">

    var url = window.location.href;
    var element_id = "my_first_element";

    function sendMessage() {
        console.log("working?");
        var xhr;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        }
        else {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }

        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
            document.getElementById('result').innerHTML =
                "status: " + xhr.status +
                "<br />statusText: " + xhr.statusText +
                "<br />server response: <br />" + xhr.responseText;
            }
        }

        xhr.open("POST", "communication.py", true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send("url=" + encodeURI(url) +
                 "&user=" + encodeURI(document.getElementById('user').innerHTML) +
                 "&message=" + encodeURI(document.getElementById('message').innerHTML) +
                 "&element_id=" + encodeURI(element_id)
                 );
    }

</script>

Google App Engine(腳本文件稱為communication.py,位於我的GAE應用程序的主目錄中):

class CommentsService(webapp2.RequestHandler):
    """This Handler is responsible for the Commenting Service"""

    def post(self):

    comment = Comments()

    user = cgi.escape(self.request.get('user'))
    message = cgi.escape(self.request.get('message'))

    comment.url_ = cgi.escape(self.request.get('url'))
    comment.user_ = cgi.escape(self.request.get('user'))
    #comment.date = cgi.escape(self.request.get('date'))
    comment.message = cgi.escape(self.request.get('message'))
    comment.element_id = cgi.escape(self.request.get('element_id'))

    comment.put()

    self.response.out.write("input1: %s<br />input2: %s" % (user, message))

app.yaml

application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /.*
  script: myapp.application

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

我在控制台中收到錯誤消息:

POST http://myapp.appspot.com/communication.py 404(未找到)

因此,我認為找到communication.py存在一些問題

為什么找不到該文件的任何想法?

總結一下格雷格已經提出的建議:

更改app.yaml中的處理程序:

handlers:
- url: /stylesheets
  static_dir: stylesheets
- url: /communication
  script: app.communication
- url: /.*
  script: myapp.application

communication.py中的更改:

class CommentsService(webapp2.RequestHandler):
    """This Handler is responsible for the Commenting Service"""

    def post(self):
        comment = Comments()

        user = cgi.escape(self.request.get('user'))
        message = cgi.escape(self.request.get('message'))

        comment.url_ = cgi.escape(self.request.get('url'))
        comment.user_ = user
        #comment.date = cgi.escape(self.request.get('date'))
        comment.message = message
        comment.element_id = cgi.escape(self.request.get('element_id'))

        comment.put()

        self.response.out.write("input1: %s<br />input2: %s" % (user, message))

app = webapp2.WSGIApplication([('/communication', CommentsService)],
                              debug=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM