2012-04-05 4 views
0

В этом коде;освежающий только div на http сообщение

def post(self): 
    chtml = displayhtml(public_key, error = None) 
    template_values = {'captchahtml': chtml} 
    path = os.path.join(os.path.dirname(__file__), 'main.html') 
    self.response.out.write(template.render(path, template_values)) 

, когда сделан запрос на отправку http, я могу обновить всю страницу с помощью указанных элементов шаблона.

Мой вопрос в том, можно ли его обновить только div или iframe вместо всей страницы?

ответ

1

Да, во время запроса можно обновить часть страницы.

Но для этого требуется некоторое приложение или логика пользовательского интерфейса на стороне браузера.

Один из способов - использовать выделенный iframe. Подумайте о iframe как о окне браузера-окна-в-браузере. Вы можете вставить любой контент, который вам нравится, в iframe, и вы можете обновить iframe независимо от содержимого, окружающего его на странице. Подход iframe часто используется в том случае, когда контент для окружающей страницы и контент для самого iframe исходят из разных мест. Например, facebook «like widget» использует контент из facebook. Долгое время Facebook предоставлял возможность людям вставлять свои страницы, iframe, содержащий только похожий виджет. Таким образом, facebook смог сохранить контроль над своими образами, брендингом, внешним видом и т. Д., Независимо от того, на какую страницу был встроен виджет.

Когда контент для фрейма и содержимого для окружающего бита из одного источника, например, вашего экземпляра appengine, вам не нужен iframe. Вы можете использовать простой div и обновлять его асинхронно.

Этот подход иногда называют AJAX - ссылкой на асинхронный Javascript и XML. Основная идея подразумевает асинхронный запрос (из обычного цикла обновления страницы), сделанный из браузера на сервер, для получения контента; логика браузера, реализованная в javascript, может затем обновлять пользовательский интерфейс любым способом, который он выбирает.

Вопреки имени, не обязательно отправлять XML в качестве ответа от такого запроса async. На самом деле более распространенным подходом является использование JSON в качестве формата данных. Но, конечно, при использовании этого шаблона проектирования ваш код Python на сервере обычно не возвращает форматированный html. Он будет возвращать данные в некотором разумном формате (XML, JSON, другое), а затем логика Javascript, работающая в браузере, будет отображать эти данные как HTML в соответствующем месте.

В стандартной модели веб-браузера есть один HTTP-запрос, отправленный на запрос страницы (хотя дополнительные запросы могут быть отправлены для .css-файлов, изображений и т. Д.), И каждый дополнительный запрос подразумевает полное обновление страницы. В модели AJAX браузер сначала запрашивает веб-страницу, как и раньше, но может асинхронно отправлять дополнительные HTTP-запросы, не обновляя страницу полностью.

+0

спасибо cheeso. Мне было интересно, как я могу использовать ajax в своем коде? –

+0

Вам нужно будет ознакомиться с основными учебными пособиями по дизайну AJAX. Вот хороший: http://www.ibm.com/developerworks/library/wa-aj-ajaxhistory/index.html AJAX используется в браузере; не имеет значения, что вы используете Python на сервере. Вам нужно будет создать логику на сервере для ответа на запросы AJAX из браузера, но это довольно просто. – Cheeso