我想将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
存在一些问题为什么找不到该文件的任何想法?
答案 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)