Різні способи звернення до сервера без перезавантаження сторінки прийнято називати загальним терміном "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) в залежності від параметрів запиту.