Следующее поколение способов взаимодействия между клиентом и сер¬вером основано на применении плавающих фреймов, которые появи¬лись в HTML 4.0. Плавающие фреймы практически не отличаются от обычных, но они могут быть размещены за пределами наборов фрей¬мов практически в любом месте страницы HTML. Методика, основан¬ная на плавающих фреймах, может быть применена к страницам, ко¬торые изначально вообще не предусматривали наличие наборов фрей¬мов. Это гораздо удобнее, когда необходимо расширить функциональ¬ные возможности старых страниц. Плавающий фрейм может быть создан даже на лету, кодом JavaScript (вскоре мы поговорим об этом). Поскольку порядок работы с плавающими фреймами тот же самый, что и с обычными фреймами, они идеально подходят для организации взаимодействий на базе технологии Ajax.
Существует два способа работы с плавающими фреймами. Самый про¬стой состоит в том, чтобы просто внедрить (статически) плавающий фрейм в страницу HTML и использовать его для выполнения запросов как скрытый фрейм. Применение этой методики повлекло бы следую¬щие изменения в отображаемой странице из первого примера:
<р>Чтобы получить информацию о клиенте, введите его
- идентификационный номер: ^Идентификационный номер:

Обратите внимание, что в атрибуты width, height и f rameborder плаваю¬щего фрейма записано значение 0, что приводит к сокрытию этого фрейма. Имя плавающего фрейма не изменилось (hiddenFrame), поэто¬му нам не потребуется вносить изменения в код JavaScript. Одно не¬большое изменение, однако, внести в страницу GetCustomerData. php придется. Функция JavaScript на этой странице ранее называлась dis-playCustomerlnfoO и располагалась во фрейме с именем displayFrame. Если вы применяете данную методику, где теперь нет фрейма с таким именем, то должны изменить код так:
window.onload = function () {
var divInfoToReturn = document.getElementByldC'divInfoToReturn");
parent.displayCustomerInfo(divInfoToReturn.innerHTML);
};
Теперь этот новый пример будет работать точно так же, как и первый пример этой главы.
Второй способ состоит в том, чтобы создавать скрытые плавающие фреймы динамически с помощью JavaScript. Эта методика может по¬казаться немножко запутанной, поскольку не все броузеры реализуют плавающие фреймы одним и тем же способом, поэтому мы просто рас¬смотрим создание скрытого фрейма последовательно, шаг за шагом.
Первый шаг достаточно прост - создание плавающего фрейма с помо¬щью метода document.createElementO и присваивание значений его ат¬рибутам:
Последняя значащая строка в этом фрагменте кода очень важна, потому что она вставляет плавающий фрейм в структуру документа (плаваю¬щий фрейм, который не был вставлен в документ, не сможет выполнять запросы). Обратите также внимание, что оба атрибута - name и id - име¬ют одно и то же значение, равное hiddenFrame. Это совершенно необходи¬мо, поскольку некоторые броузеры организуют доступ к новому фрей¬му по значению атрибута name, а некоторые по значению атрибута id.
Далее следует описание глобальной переменной, которая будет хра¬нить ссылку на объект-фрейм. Обратите внимание, что объект-фрейм -это не то же самое, что возвращает функция createElementO. Чтобы за¬получить этот объект, надо отыскать его в наборе фреймов. Это и будет значение глобальной переменной:
Если вставить этот код в предыдущий пример с плавающим фреймом, то можно внести следующие изменения в функцию requestCustomerln-fo():
function requestCustomerlnfoO { if (!oIFrame) { createIFrame();
setTimeout(requestCustomerlnfo, 10); return;
}
var sld = document.getElementByldC'txtCustomerld").value; oIFrame.location = "GetCustomerOata.php?id=" + sld;
}
Теперь функция будет проверять наличие плавающего фрейма в доку¬менте с помощью переменной oIFrame. И в случае его отсутствия вызы¬вать функцию createlFrameQ и затем вызывать себя повторно через 10 миллисекунд. Дело в том, что только Internet Explorer сразу же на¬чинает распознавать только что вставленный плавающий фрейм, боль¬шинству же остальных броузеров для этого требуется несколько мил¬лисекунд. Когда функция будет запущена вновь, она исполнит осталь¬ную часть кода, где в последней строке, которая была изменена, распо¬ложена ссылка на объект oIFrame.
Эта методика при работе с запросами типа GET не вызывает особых за¬труднений, но работа с запросами POST - совсем другое дело. Лишь не¬которые броузеры допускают ссылку на динамически созданный пла¬вающий фрейм в атрибуте target формы, и IE не входит в их число. Это обстоятельство еще больше осложняет применение методики скрытых плавающих фреймов к запросам POST.