refactor 3-more into separate books
This commit is contained in:
parent
bd1d5e4305
commit
87639b2740
423 changed files with 9 additions and 9 deletions
96
4-ajax/12-ajax-iframe/date.view/iframe.js
Normal file
96
4-ajax/12-ajax-iframe/date.view/iframe.js
Normal file
|
@ -0,0 +1,96 @@
|
|||
|
||||
|
||||
function createIframe(name, src, debug) {
|
||||
src = src || 'javascript:false'; // пустой src
|
||||
|
||||
var tmpElem = document.createElement('div');
|
||||
|
||||
// в старых IE нельзя присвоить name после создания iframe, поэтому создаём через innerHTML
|
||||
tmpElem.innerHTML = '<iframe name="'+name+'" id="'+name+'" src="'+src+'">';
|
||||
var iframe = tmpElem.firstChild;
|
||||
|
||||
if (!debug) {
|
||||
iframe.style.display = 'none';
|
||||
}
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
return iframe;
|
||||
}
|
||||
|
||||
// функция постит объект-хэш content в виде формы с нужным url , target
|
||||
// напр. postToIframe('/count.php', {a:5,b:6}, 'frame1')
|
||||
|
||||
function postToIframe(url, data, target){
|
||||
var phonyForm = document.getElementById('phonyForm');
|
||||
if(!phonyForm){
|
||||
// временную форму создаем, если нет
|
||||
phonyForm = document.createElement("form");
|
||||
phonyForm.id = 'phonyForm';
|
||||
phonyForm.style.display = "none";
|
||||
phonyForm.method = "POST";
|
||||
phonyForm.enctype = "multipart/form-data";
|
||||
document.body.appendChild(phonyForm);
|
||||
}
|
||||
|
||||
phonyForm.action = url;
|
||||
phonyForm.target = target;
|
||||
|
||||
// заполнить форму данными из объекта
|
||||
var html = [];
|
||||
for(var key in data){
|
||||
var value = String(data[key]).replace(/"/g, """);
|
||||
html.push("<input type='hidden' name=\""+key+"\" value=\""+value+"\">");
|
||||
}
|
||||
phonyForm.innerHTML = html.join('');
|
||||
|
||||
phonyForm.submit();
|
||||
}
|
||||
|
||||
|
||||
var CallbackRegistry = {}; // реестр
|
||||
|
||||
function iframeGet(url, onSuccess, onError) {
|
||||
|
||||
var iframeOk = false; // флаг успешного ответа сервера
|
||||
|
||||
var iframeName = Math.random(); // случайное имя для ифрейма
|
||||
var iframe = createIframe(iframeName, url);
|
||||
|
||||
CallbackRegistry[iframeName] = function(data) {
|
||||
iframeOk = true; // сервер ответил успешно
|
||||
onSuccess(data);
|
||||
}
|
||||
|
||||
iframe.onload = function() {
|
||||
iframe.parentNode.removeChild(iframe); // очистка
|
||||
delete CallbackRegistry[iframeName];
|
||||
if (!iframeOk) onError(); // если сервер не ответил как надо - что-то не так
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// аналогично iframeGet, но в postToIframe передаются данные data
|
||||
function iframePost(url, data, onSuccess, onError) {
|
||||
|
||||
var iframeOk = false;
|
||||
|
||||
var iframeName = Math.random();
|
||||
var iframe = createIframe(iframeName);
|
||||
|
||||
CallbackRegistry[iframeName] = function(data) {
|
||||
iframeOk = true;
|
||||
onSuccess(data);
|
||||
}
|
||||
|
||||
iframe.onload = function() {
|
||||
iframe.parentNode.removeChild(iframe); // очистка
|
||||
delete CallbackRegistry[iframeName];
|
||||
|
||||
if (!iframeOk) onError(); // если коллбэк не вызвался - что-то не так
|
||||
}
|
||||
|
||||
postToIframe(url, data, iframeName);
|
||||
}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue