Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Ajax (аякс) динамическая загрузка картинок. профи подскажите
цитата
08/02/11 в 00:04
 wdfrretevw
Дано: скрипт через равные промежутки времени загружает новый банер. Но чтоб узнать http адрес банера, надо запрашивать сервер. На даный момент это реализовано через ифрейм. через его перезагрузку. Пример (урезанный)
Код:

//здесь мы обновляем ифрейм. там передается только адрес нового банера
parent.ii.location.replace(http://url);

if(parent.ii.document.all.d){
// считываем этот адрес, и загружаем картинку
    ob=parent.ii.document.all.d.value;
    im=new Image();im.src=ob;
}   

недостатки что постояно перешелкивает - история увеличивается, да и ифрейм приходится скрывать и вообще.... вопрос собствено в том как просто и быстро получить с сервера адрес новой картинки. И без стороних библиотек.
Буду ну оочень благодарен.
цитата
08/02/11 в 00:09
 EllGree
Если в пределах домена, то через аяксный запрос. Если сервера разные, то придется делать прокладку, например, на php, который будет выполнять запрос к стороннему серверу и выдавать данные скрипту.
Ядро аякса:

function sendRequest(url,callback,postData) {
   var req = createXMLHTTPObject();
   if (!req) return;
   var method = (postData) ? "POST" : "GET";
   req.open(method,url,true);
   req.setRequestHeader('User-Agent','XMLHTTP/1.0');
   if(postData) req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
   req.onreadystatechange = function () {
      if (req.readyState != 4) return; // Not yet
      if (req.status != 200 && req.status != 304) return; // HTTP Error
      callback(req);
   }
   if (req.readyState == 4) return;
   req.send(postData);
}
var XMLHttpFactories = [
   function () {return new XMLHttpRequest()},
   function () {return new ActiveXObject("Msxml2.XMLHTTP.6.0")},
   function () {return new ActiveXObject("Msxml2.XMLHTTP.3.0")},
   function () {return new ActiveXObject("Msxml2.XMLHTTP")},
   function () {return new ActiveXObject("Msxml3.XMLHTTP")},
   function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
   var xmlhttp = false;
   for (var i=0;i<XMLHttpFactories.length;i++) {
      try { xmlhttp = XMLHttpFactories[i](); }
      catch (e) { continue; }
      break;
   }
   return xmlhttp;
}

Пример использования:

// Обработчик загрузки:
function myhandler(q) {
if(typeof(q.responseText)!='undefined') {
   // alert(q.responseText);
   document.getElementById('YourBannerLayerID').innerHTML = q.responseText;
}
}
// Выполнить запрос:
sendRequest('/ajax.php?args='+args,myhandler);

Код php-прокладки ajax.php:

<?php
if(empty($_GET['args'])) die('Wrong usage');
echo file_get_contents('http://host.tld/bannersystem?args='.$_GET['args']);
?>
цитата
08/02/11 в 02:07
 wdfrretevw
В пределах домена, оценил, щас буду пробовать.
цитата
08/02/11 в 02:22
 wdfrretevw
чтот не понял, а возращать адрес где должна страница
<body>http://url.gif</body> - так?
или в заголовке "Location"
цитата
08/02/11 в 02:39
 wdfrretevw
все разобрался работает


Эта страница в полной версии