Вызов внутреннего URL-адреса с помощью API канала JavaScript - PullRequest
0 голосов
/ 29 ноября 2011

Реализация обработчика

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

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

Реализация jQuery

 $(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;
 });

Я хочу вызвать обработчик Back-end. Я не знаю как это сделать. Это то, что я сделал. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 29 ноября 2011

Вы получаете доступ к концу с URL-адресом, подобным http://instance.backend.appid.appspot.com (см. документы ). Поскольку вы не можете создать XHR для страницы, подобной этой, со страницы, отображаемой на http://appid.appspot.com,, у вас есть два основных варианта:

Вы можете направить запрос к вашему бэкэнду через сервлет на вашем веб-интерфейсе. Так что вы можете сделать что-то вроде:

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 для выполнения междоменного запроса, что легко сделать с помощью метода * jjuery getJSON 1013 *:

$.getJSON("http://instance.backend.appid.appspot.com/dashboard/", function() {
  alert("success");
});

Мне неясно, что делает ваш / dashboard / handler, поэтому я не уверен, что он может / должен возвращать JSON или если вы заботитесь о заголовках и т. Д.

Также обратите внимание, что использование метода getJSON не будет отправлять файлы cookie, но вы можете сделать это с помощью сервлета маршалинга.

...