Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ajax] problem z przeładowywaniem div`a pod IE
webber
post
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 19
Dołączył: 30.10.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jakieś rady?
Tak, uzyj normalnej biblioteki js np. jQuery i nie baw sie juz wiecej w takie reczne rezanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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;
    }
Go to the top of the page
+Quote Post
blooregard
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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
}
Go to the top of the page
+Quote Post
webber
post
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 19
Dołączył: 30.10.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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... (IMG:http://forum.php.pl/style_emoticons/default/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


Ten post edytował webber 14.10.2008, 09:36:56
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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

aczkolwiek osobiscie nie mialem takiego problemu z IE
Go to the top of the page
+Quote Post
webber
post
Post #7





Grupa: Zarejestrowani
Postów: 107
Pomógł: 19
Dołączył: 30.10.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował webber 14.10.2008, 09:52:11
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
kubel-junior
post
Post #9





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 29.01.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
BatGraf
post
Post #10





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 20.03.2007
Skąd: Kruklanki/Otwock

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A to już zależy od pliku, który otwierasz. (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 11:24