Avatar billede dotnewbi Juniormester
29. marts 2008 - 09:46 Der er 5 kommentarer og
2 løsninger

ajax preload image

Hej eksperter,

Hvordan får jeg dette script til at vise et preload gif billedet indtil at ajax scriptet er færdigt med at loade siden ind.

var loadedobjects=""
var rootdomain="http://"+window.location.hostname

function ajaxpage(url, containerid){
var page_request = false
if (window.XMLHttpRequest) // Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
page_request.open('GET', url, true)
page_request.send(null)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}
Avatar billede w13 Novice
29. marts 2008 - 10:23 #1
Ret:

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}

til:

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById("loadimg").parentNode.removeChild(document.getElementById("loadimg"));
document.getElementById(containerid).innerHTML=page_request.responseText
}else{
var newElement=document.createElement("img");
newElement.setAttribute("id","loadimg");
newElement.setAttribute("src","loading.gif");
document.getElementsByTagName("body")[0].appendChild(newElement)
}

Så vil billedet blive indsat i bodysektionen.
Avatar billede dotnewbi Juniormester
29. marts 2008 - 11:26 #2
Scriptet virker til dels, der kommer tre nye load billeder frem hver gang en side hentes og de forsvinder ikke igen, så når man har fortaget 3 side hentninger er der 9 synlige loadbilleder.
Avatar billede w13 Novice
29. marts 2008 - 11:28 #3
Nå ja, det er klart. Brug i stedet:
-----------------------------------
var loadedobjects=null;
var rootdomain="http://"+window.location.hostname;

function ajaxpage(url, containerid){
var page_request = false;
if (window.XMLHttpRequest) // Mozilla, Safari etc
page_request = new XMLHttpRequest();
else if (window.ActiveXObject){ // IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false;
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
page_request.open('GET', url, true);
page_request.send(null);
var newElement=document.createElement("img");
newElement.setAttribute("id","loadimg");
newElement.setAttribute("src","loading.gif");
document.getElementsByTagName("body")[0].appendChild(newElement)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById("loadimg").parentNode.removeChild(document.getElementById("loadimg"));
document.getElementById(containerid).innerHTML=page_request.responseText
}
Avatar billede dotnewbi Juniormester
29. marts 2008 - 12:07 #4
Det virker perfect !
Avatar billede dotnewbi Juniormester
29. marts 2008 - 13:02 #5
Jeg har dog lige en spørgsmål, hvordan får jeg loading billedet placeret i midten af den div som jeg loader siderne ind i?
Avatar billede w13 Novice
29. marts 2008 - 13:22 #6
Evt. ved at tilføje:
newElement.style.margin="auto";
newElement.style.top="50%";

efter:
newElement.setAttribute("id","loadimg");

Tror, det kunne virke.
Avatar billede olebole Juniormester
29. marts 2008 - 16:20 #7
<ole>

- men derudover har det ikke meget med Ajax at gøre. Du bør bruge 'post' i stedet for 'get', som giver memory problemer i IE - og så bør du undgå innerHTML, som er tussegammel, invalid kode fra midthalvfemserne. Du bør i stedet bruge DOM til indsættelse af data.

Ved du forøvrigt, at indhold, der er hentet med Ajax ikke indekseres? Kun Flash er ligeså godt til at skjule indhold for søgemaskiner  ;o)

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester