Отримання даних від сервера без перезавантаження сторінки

Різні способи звернення до сервера без перезавантаження сторінки прийнято називати загальним терміном "Remote Scripting". Тут будуть зібрані і описані переваги та недоліки кількох найбільш поширених підходів.







IFRAME: Завантаження даних в прихований фрейм

Найпростіший і найбільш широко поширений спосіб - використовувати прихований фрейм, в який і будуть завантажуватися дані. Зазвичай такий фрейм реалізується за допомогою елемента IFRAME.

Використовувати display: none для приховування фрейму не можна - Опера не дозволить звернутися до такого кадру. (Альтернативне працююче рішення - position: absolute; visibility: hidden; width: 0px; height: 0px;.)
Запит і отримання даних при цьому відбуваються асинхронним чином, найчастіше за допомогою callback-функції, яка визначається в контексті основної сторінки:

Коли скрипту потрібно отримати якісь дані з сервера, він дає команду на завантаження сторінки в цей iframe:

Можна також використовувати сабміт невидимою форми з target = "buffer". Це дозволить передавати дані на сервер методом POST.

переваги

  • Очевидність реалізації: просто IFRAME-перше, що спадає на думку.
  • Можливість відправляти в IFRAME дані довільно форми (в тому числі - динамічно створеної), що вирішує проблеми з кодуваннями даних (всі перекодування виконує браузер).

недоліки

  • Засмічення history браузера.
  • Проблеми з кросбраузерністю: кожен браузер має свої власні і вкрай нестабільні особливості при роботі з IFRAME.
  • Великі витрати пам'яті (фактично, кожен IFRAME - це окремий маленький браузер).
  • Складнощі в Opera: можна звернутися тільки до вмісту того IFRAME, при створенні якого був вказаний атрибут src, що співпадає з ім'ям поточного сайту.






XMLHttpRequest і ActiveX Microsoft.XMLHTTP

переваги

  • Компоненти використовуються за їх прямим призначенням.
  • Велика економія пам'яті в порівнянні з IFRAME.

недоліки

  • Рішення специфічні для IE і Mozilla / Firefox (в IE взагалі не працює з вимкненими ActiveX), в Opera підтримка є тільки починаючи з версії 8.

SCRIPT: Завантаження даних через динамічно створюваний тег SCRIPT

переваги

  • Хороша кроссбраузерность. Ідентичний код і метод в різних браузерах (в тому числі - працює в Opera).
  • Економія пам'яті в порівнянні з IFRAME.
    • Чи не псується history.
    • Метод не спирається на особливості браузерів і працює в IE5.0 +, Mozilla 1.7+, Firefox 1.0+ і Opera 7.3+ (тут «+» означає «в цій і новіших версіях»). Крім того, не використовує ні ActiveX, ні IFRAME.

недоліки

  • Неможливо відправити на сервер дуже багато даних (обмеження на довжину QUERY_STRING).
  • Необхідно в серверному скрипті працювати з Unicode (в PHP для цього є розширення iconv).
  • Браузери по-різному працюють з динамічно створеними SCRIPT-тегами, тому кросбраузерності рішення містить ряд хаков.

JsHttpRequest: Все вищесказане в одній зручній бібліотеці

переваги

  • Повністю сумісний з XMLHttpRequest інтерфейс.
  • Кросбраузерність.
  • Наявність спрощеного інтерфейсу.
  • Можливість динамічної завантаження файлів на сервер.
  • Автоматичний вибір оптимального методу завантаження (XMLHttpRequest, script або form) в залежності від параметрів запиту.

недоліки

Приклади використання Remote Scripting







Схожі статті