Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax] problem z przeładowywaniem div`a pod IE
Forum PHP.pl > Forum > XML, AJAX
webber
Witam,

jest funkcja:
Kod
<script type="text/javascript">

//aby dzialalo na IE (niewiem kto tego uzywa jeszcze)
var ObiektXMLHttp = false;

if (window.XMLHttpRequest){
ObiektXMLHttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

function forum(){
if(ObiektXMLHttp){
//pobieranie danych
ObiektXMLHttp.open("GET", 'forum_posts.html');

ObiektXMLHttp.onreadystatechange = function(){
if(ObiektXMLHttp.readyState == 4){
i = ObiektXMLHttp.responseText;
document.getElementById('forum').innerHTML=i;
}
}

ObiektXMLHttp.send(null);
}
}

</script>


Wczytuje ona posty forum do diva od id forum, w FF jest ok, Opera tak samo, niestety badzIEwIE kompletnie nie reaguje, przeładowuje dane dopiero po zamknięciu i otwarciu strony ponownie. Jakieś rady?
nospor
Cytat
Jakieś rady?
Tak, uzyj normalnej biblioteki js np. jQuery i nie baw sie juz wiecej w takie reczne rezanie winksmiley.jpg
nevt
spróbuj tej konstrukcji:
Kod
    var ajax = false;
    if(window.XMLHttpRequest)
        ajax = new XMLHttpRequest();
    else if(window.ActiveXObject)
    {
        try
        {
            ajax = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }            catch (e)
            {}
        }
    }    
    if(!ajax)
    {
        alert('Błąd przy tworzeniu obiektu AJAX! Aktualizacja danych jest niemożliwa.');
        return false;
    }
blooregard
Ja miałem problem w ie7 z innerHTML, jak tworzyłem dynamicznie listę opcji w <select>. Pomogła po dłuuugim szukaniu następująca funkcja:

Kod
function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - corrige o bug do InnerHTML em selects no IE
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Versão: 2.1 - 04/09/2007
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* @objeto(tipo HTMLobject): o select a ser alterado
* @innerHTML(tipo string): o novo valor do innerHTML
*******/
    objeto.innerHTML = ""
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
      
    
    for(var i=0;i<selTemp.childNodes.length;i++){
  var spantemp = selTemp.childNodes[i];
  
        if(spantemp.tagName){    
            opt = document.createElement("OPTION")
    
   if(document.all){ //IE
    objeto.add(opt)
   }else{
    objeto.appendChild(opt)
   }      
    
   //getting attributes
   for(var j=0; j<spantemp.attributes.length; j++){
    var attrName = spantemp.attributes[j].nodeName;
    var attrVal = spantemp.attributes[j].nodeValue;
    if(attrVal){
     try{
      opt.setAttribute(attrName,attrVal);
      opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
     }catch(e){}
    }
   }
   //getting styles
   if(spantemp.style){
    for(var y in spantemp.style){
     try{opt.style[y] = spantemp.style[y];}catch(e){}
    }
   }
   //value and text
   opt.value = spantemp.getAttribute("value")
   opt.text = spantemp.innerHTML
   //IE
   opt.selected = spantemp.getAttribute('selected');
   opt.className = spantemp.className;
  }
}    
document.body.removeChild(selTemp)
selTemp = null
}
webber
Cytat(nospor @ 14.10.2008, 09:43:13 ) *
Tak, uzyj normalnej biblioteki js np. jQuery i nie baw sie juz wiecej w takie reczne rezanie winksmiley.jpg


No ok, moje rozwiązanie w jquery:

Kod
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function get_forum(){

                               $("#forum").load("forum_posts.html");

                               };

                
  $(document).ready(function(){  setInterval("get_forum()",500);  });

  </script>


Lecz ten sam problem, w FF śmiga w IE muszę wyłączyć i włączyć przeglądarkę by jakiekolwiek zmiany ujrzały moje oczy... winksmiley.jpg

Edit: Znalazłem coś w sieci, IE kaszani coś z pamięcią podręczną... co zrobić z tym:
IE is using the cached version, since the URL hasn't changed. Try

Cytat
+ '&nocache=' + Math.random()

at the end of the URL.

- Richard
nospor
Kod
$("#forum").load("forum_posts.html"+ '?nocache=' + Math.random());

aczkolwiek osobiscie nie mialem takiego problemu z IE
webber
Dzięki działa, temat może iść do zamknięcia.

Poniżej gotowe rozwiązanie [jestem pewien, że komuś się przyda]:

Poniższy kod wczytuje plik forum_posts.html do diva o id=forum odświeżając go co pół sekundy [dzięki nospor, ale gafa o_O].

Kod
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function get_forum(){

                               $("#forum").load("forum_posts.html"+ '?nocache=' + Math.random());

                               };

                
  $(document).ready(function(){

                               setInterval("get_forum()",500);

                });
                


  </script>


użycie:

Kod
<div id="forum></div>


Pozdrawiam smile.gif
nospor
Cytat
odświeżając go co 5 sekund.
setInterval("get_forum()",500);

Nie, twoj kod odswieza go co pol sekundy
Liczyc kazdy moze, jeden lepiej drugi gorzej winksmiley.jpg
kubel-junior
Problem jest taki że IE określa czy ma aktualizować strone czy nie na podstawie adresu URL przesłanego w zapytaniu. Jeśli podany URL jest znany to IE zakłada że nowa strona jest taka sama.
Jest pewne rozwiązanie: dodawaj do adresu url pewną liczbe aby kazdorazowo ten adres był inny.
np.
var the_url = "http://jakis_tam_adres.html?ignoruj = " + new Date().getTime() ;
gdzie zmiennej ignoruj nie bierzesz pod uwage w swoim skrypcie.

tym sposobem kazdy adres jest unikalny.
Pozdro

ps:
IE to gówno
BatGraf
Ten skrypt jest poprostu extra. Szukałem czegoś podobnego juz jakiś czas.

Mam jedynie pytanie - czy zamiast czytać z pliku "forum_posts.html" moze odczytywać z bazy sql ?
erix
A to już zależy od pliku, który otwierasz. tongue.gif

forum_posts.html w tym wypadku może byc obrabiany przez PHP i wtedy hulaj dusza. No chyba, że masz na myśli wykonywanie zapytań bezpośrednio z poziomu JS, to wtedy zapomnij.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.