Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX]problem z IE
Forum PHP.pl > Forum > Przedszkole
marcus753
Mam taki skrypcik

  1.  
  2. // tworzymy zmienna
  3. var object = false;
  4.  
  5. // tworzymy obiekt XMLHttpRequest (dla IE jest troche inaczej, stad funkcja warunkowa)
  6. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  7. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  8.  
  9. // ponizsza funkcja pobiera dane ze wskazanego zrodla (pliku lub skryptu php) do wskazanego
  10. // DIVa poprzez obiekt XMLHttpRequest
  11. function getData(dataSource, divID)
  12. {
  13. // kontynuuje wylacznie gdy obiekt nie jest zajety
  14. if (object.readyState==4 || object.readyState==0)
  15. {
  16. // tworzy zmienna odpowiadajaca konkretnemu obiektowi na stronie
  17. var obj = document.getElementById(divID);
  18.  
  19. // czyta z pliku lub wykonuje skrypt
  20. object.open("GET", dataSource);
  21.  
  22. // definiuje metode obslugi odpowiedzi serwera
  23. object.onreadystatechange = function()
  24. {
  25. // kontynuuje jesli transmisja zostala zakonczona powodzeniem
  26. if (object.readyState == 4 && object.status == 200)
  27. obj.innerHTML= object.responseText;
  28. }
  29. // wysyla zadanie do serwera
  30. object.send(null);
  31. }
  32. }
  33.  
  34. // w ponizszej funkcji wywolujemy funkcje getData z odpowiednimi parametrami
  35. // oraz wywolujemy ja sama rekurencyjnie po co okreslony czas (w naszym wypadku 1000 ms)
  36. function odswiezaj()
  37. {
  38. getData('czat1.php','czat');
  39. setTimeout("odswiezaj()", 1000);
  40. }
  41.  
  42.  
  43. </head>
  44. <div style="border:1px solid blue; height:280px;" id="czat"></div>
  45.  
  46. <script language=javascript>
  47. odswiezaj();
  48. </div>
  49.  
  50. </body>
  51. </html>


skrypt co 1s wykonuje plik czat1.php (w tle i wyświetla jego zawartość w divie)

Wszystko działa idealnie pod mozilla i opera a oczywiscie w IE nie dziala ; sadsmiley02.gif Co może być źle questionmark.gif sciana.gif
varez
uzyj
Kod
<script type="text/javascript">


nie analizowalem reszty


edit:
Kod
<script language=javascript>

aaaaa..... nie zauwazylem tego wczesniej..

wszystkie otwarcia script pisz tak jak wyzej masz podane
marcus753
poprawiłem:

  1. <script type="text/javascript">
  2. // tworzymy zmienna
  3. var object = false;
  4.  
  5. // tworzymy obiekt XMLHttpRequest (dla IE jest troche inaczej, stad funkcja warunkowa)
  6. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  7. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  8.  
  9. // ponizsza funkcja pobiera dane ze wskazanego zrodla (pliku lub skryptu php) do wskazanego
  10. // DIVa poprzez obiekt XMLHttpRequest
  11. function getData(dataSource, divID)
  12. {
  13. // kontynuuje wylacznie gdy obiekt nie jest zajety
  14. if (object.readyState==4 || object.readyState==0)
  15. {
  16. // tworzy zmienna odpowiadajaca konkretnemu obiektowi na stronie
  17. var obj = document.getElementById(divID);
  18.  
  19. // czyta z pliku lub wykonuje skrypt
  20. object.open("GET", dataSource);
  21.  
  22. // definiuje metode obslugi odpowiedzi serwera
  23. object.onreadystatechange = function()
  24. {
  25. // kontynuuje jesli transmisja zostala zakonczona powodzeniem
  26. if (object.readyState == 4 && object.status == 200)
  27. obj.innerHTML= object.responseText;
  28. }
  29. // wysyla zadanie do serwera
  30. object.send(null);
  31. }
  32. }
  33.  
  34. // w ponizszej funkcji wywolujemy funkcje getData z odpowiednimi parametrami
  35. // oraz wywolujemy ja sama rekurencyjnie po co okreslony czas (w naszym wypadku 1000 ms)
  36. function odswiezaj()
  37. {
  38. getData('czat1.php','czat');
  39. setTimeout("odswiezaj()", 1000);
  40. }
  41.  
  42.  
  43. </head>
  44. <div style="border:1px solid blue; height:280px;" id="czat"></div>
  45.  
  46. <script type="text/javascript">
  47. odswiezaj();
  48. </div>
  49.  
  50. </body>
  51. </html>


i dalej w IE nie działa eh mam już dość...

co ciekawe jak dam w IE nową kartę to od razu wczytuje mi się aktualny stan na mojej stronie...

tak jakby otwarcie nowej karty powodowało odświeżenie poprzedniej karty...

podaje link do stronki to sami zobaczcie, tylko się nie śmiejcie bo strona jest wersji dość wstepnej

http://www.marcus.osa.pl/strona/
varez
a sprawdz sobie czy to wina setTimeout czy ajaxa, powoli do tego dojdziesz
marcus753
Problemy z IE
Problemem staje się pamięć cache przeglądarki, ponieważ IE zapisuje sobie pliki do podręcznej pamięci czasami skrypty nie chcą się odświeżać. rozwiązaniem okazuje się dodanie nagłówków HTTP dzięki którym IE nie wczyta strony z podręcznej pamięci:

  1. ajax_method.setHeader( "Pragma", "no-cache" );
  2. ajax_method.addHeader( "Cache-Control", "must-revalidate" );
  3. ajax_method.addHeader( "Cache-Control", "no-cache" );
  4. ajax_method.addHeader( "Cache-Control", "no-store" );
  5. ajax_method.setDateHeader("Expires", 0)
;


Grupę powyższych funkcji należy wpisać między funkcją ajax_method.open() a ajax_method.send().

Znalazłem taką wskazówkę ale jeśli ją wpisuje do skryptu to mi w ogóle nie wykonuje eh...
varez
dopisuj czas do GET..
tak jakbys wywolywał
Kod
// pobierasz sobie czas jako string (np timestamp)
"ajax.php?random="+czas


choć w gołym ajaxie to pewnie jako naglowek tego geta dorzucasz?

do ajaxa (w ogole do js) polecam jquery, o wiele mniej zabawy
celbarowicz
sprawdź to....
  1. <html>
  2.  
  3. <head>
  4.  
  5. function getNewHttpObject(){
  6. if (typeof XMLHttpRequest != "undefined" ){return new XMLHttpRequest();}
  7. else if (window.ActiveXObject) {
  8. var aVersions=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
  9. "MSXML2.XMLHttp","Microsoft.XMLHttp"];
  10. for (var i=0; i < aVersions.length; i++){
  11. try{
  12. var oXmlHttp=new ActiveXObject(aVersions[i]);
  13. return oXmlHttp;
  14. } catch (oError) { }
  15. }
  16. }
  17. throw new Error("Nie można utworzyć obiektu XMLHttp.");
  18. }
  19. //----------------------------------------
  20. function podstaw(zrodlo,cel){
  21. var nowy = getNewHttpObject();
  22. nowy.onreadystatechange = function() {if (nowy.readyState == 4) {
  23. if (nowy.status == 200) {
  24. document.getElementById(cel).innerHTML = nowy.responseText;
  25. } else {
  26. document.getElementById(cel).innerHTML="<p><span class='redtxt'>Error!<\/span> HTTP request return the following status message:&nbsp;" + theHttpRequest.statusText +"<\/p>";
  27. }
  28. }
  29. };
  30. nowy.open("POST", zrodlo);
  31. nowy.send(false);
  32. }
  33.  
  34.  
  35.  
  36. function odswiezaj()
  37.  
  38. {
  39.  
  40. podstaw('napis.php','czat');
  41.  
  42. setTimeout("odswiezaj()", 1000);
  43.  
  44. }
  45.  
  46. </script>
  47. </head>
  48.  
  49. <body>
  50.  
  51. <div style="border:1px solid blue; height:80px; width:200px;" id="czat"></div>
  52.  
  53. <script language=javascript>
  54.  
  55. odswiezaj();
  56.  
  57. </script>
  58.  
  59. </div>
  60.  
  61. </body>
  62.  
  63. </html>
  64.  
  65.  

na moim IE działa w napis.php umieściłem: echo $obecna_data_i_godzina=date("Y-m-d H:i:s",time()); ODEZWIJ SIE
marcus753
Dzięki wszystkim za pomoc

Ja się wkurzyłem i znalazłem w sieci taki prosty skrypcik:

  1. <script src="http://code.jquery.com/jquery-latest.js"></script>
  2. function get_forum(){
  3.  
  4. $("#forum").load("czat1.php"+ '?nocache=' + Math.random());
  5.  
  6. };
  7.  
  8.  
  9. $(document).ready(function(){
  10.  
  11. setInterval("get_forum()",1000);
  12.  
  13. });
  14.  
  15.  
  16.  
  17. </script>


dziala w IE i reszcie więc jestem zadowolony

Jeszcze raz dzięki i pozdro !
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.