Jquery 使用javascript通道API调用后端URL
处理程序实现Jquery 使用javascript通道API调用后端URL,jquery,python,google-app-engine,Jquery,Python,Google App Engine,处理程序实现 class TestHandler(RequestHandler, Jinja2Mixin): def get(self): channel_id = str(random.randint(1, 10000)) + str(datetime.now()) chat_token = channel.create_channel(channel_id) context = {'channel_id': channel_id, 'chat_token': cha
class TestHandler(RequestHandler, Jinja2Mixin):
def get(self):
channel_id = str(random.randint(1, 10000)) + str(datetime.now())
chat_token = channel.create_channel(channel_id)
context = {'channel_id': channel_id, 'chat_token': chat_token}
return self.render_response('test.html', **context)
def post(self):
channel_id = str(random.randint(1, 10000)) + str(datetime.now())
chat_token = channel.create_channel(channel_id)
context = {'channel_id': channel_id, 'chat_token': chat_token}
return self.render_response('test.html', **context)
<html>
<head>
<script type="text/javascript" language="javascript" src="/static/js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" language="javascript" src="/static/js/backend.js"></script>
</head>
<body>
<form method="post" id="testform" name="testform">
<br><label name="channel_id" id="channel_id">{{channel_id}}</label>
<br><label name="chat_token" id="channel_id">{{chat_token}}</label>
<input type="submit" id="btnsubmit" class="btnsubmit" name="btnsubmit" value="submit" />
</form>
</body>
</html>
$(document).ready(function () {
var token =$('#channel_id').val()
alert(token)
var channel = new goog.appengine.Channel(token);
var socket = channel.open();
socket.onopen = onOpened;
onOpened = function() {
connected = true;
var xhr = new XMLHttpRequest();
xhr.open('POST','/dashboard/', true);
xhr.send();
};
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;
});
HTML实现
class TestHandler(RequestHandler, Jinja2Mixin):
def get(self):
channel_id = str(random.randint(1, 10000)) + str(datetime.now())
chat_token = channel.create_channel(channel_id)
context = {'channel_id': channel_id, 'chat_token': chat_token}
return self.render_response('test.html', **context)
def post(self):
channel_id = str(random.randint(1, 10000)) + str(datetime.now())
chat_token = channel.create_channel(channel_id)
context = {'channel_id': channel_id, 'chat_token': chat_token}
return self.render_response('test.html', **context)
<html>
<head>
<script type="text/javascript" language="javascript" src="/static/js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" language="javascript" src="/static/js/backend.js"></script>
</head>
<body>
<form method="post" id="testform" name="testform">
<br><label name="channel_id" id="channel_id">{{channel_id}}</label>
<br><label name="chat_token" id="channel_id">{{chat_token}}</label>
<input type="submit" id="btnsubmit" class="btnsubmit" name="btnsubmit" value="submit" />
</form>
</body>
</html>
$(document).ready(function () {
var token =$('#channel_id').val()
alert(token)
var channel = new goog.appengine.Channel(token);
var socket = channel.open();
socket.onopen = onOpened;
onOpened = function() {
connected = true;
var xhr = new XMLHttpRequest();
xhr.open('POST','/dashboard/', true);
xhr.send();
};
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;
});
我想呼叫后端处理程序。我不知道怎么做。这就是我所做的。有人可以提供帮助吗?您可以使用url访问后端,如(请参阅)。由于无法从上呈现的页面对这样的页面进行XHR,因此基本上有两个选项: 您可以通过前端的servlet将请求封送到后端。所以你可以这样做:
class MarshalServlet(RequestHandler):
""" This class is part of your frontend. """
def post(self, instance, backend):
# generate an urlfetch request to http[s]?://instance.backend.appid.appspot.com
# and return its result.
# (left as an exercise for the reader)
# add a "dashboard" handler to your frontend application.
app = webapp.WSGIApplication([('/dashboard/', MarshalServlet),
# other servlets etc.
], debug=True)
或者您可以使用JSONP执行跨域请求,这很容易:
我不清楚您的/dashboard/handler是做什么的,所以我不确定它是否可以/应该返回JSON,或者您是否关心头等等
还请注意,使用getJSON方法不会发送cookies,但您可以使用封送servlet来发送cookies。我认为通道API与这个问题基本无关。