如何使用JavaScript XMLhttpRequest向Google App Engine发送POST请求?

时间:2014-07-27 11:59:02

标签: javascript python google-app-engine xmlhttprequest

我想将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

存在一些问题

为什么找不到该文件的任何想法?

1 个答案:

答案 0 :(得分:0)

总结Greg已经建议的内容:

在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)