Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax] aktualizowany tekst
Forum PHP.pl > Forum > Po stronie przeglądarki
kicaj
Napisalem cos takiego:
  1. <head>
  2.  
  3. <script language="JavaScript" type="text/javascript">
  4.  
  5. function makeRequest( strFileName )
  6. {
  7. if( window.XMLHttpRequest )
  8. {
  9. resHttpRequest = new XMLHttpRequest();
  10. }
  11. else if( window.ActiveXObject )
  12. {
  13. resHttpRequest = new ActiveXObject( 'Microsoft.XMLHTTP' );
  14. }
  15.  
  16. resHttpRequest.onreadystatechange = createAlert;
  17. resHttpRequest.open( 'GET', strFileName, true );
  18. resHttpRequest.send( null );
  19. }
  20.  
  21. function createAlert()
  22. {
  23. if( resHttpRequest.readyState == 4 )
  24. {
  25. if( resHttpRequest.status == 200 )
  26. {
  27. var xmlDoc = resHttpRequest.responseXML;
  28. var strPhone = xmlDoc.getElementsByTagName( 'phone' )[0];
  29. document.write( strPhone.firstChild.data );
  30. }
  31. else
  32. {
  33. alert( 'Blad!' );
  34. }
  35. }
  36. }
  37.  
  38. </script>
  39.  
  40. </head>
  41.  
  42. <body>
  43.  
  44. <a href="#" onclick="makeRequest( 'default.xml' );">Otwórz</a>
  45.  
  46. </body>
  47. </html>

i default.xml:
  1. <?xml version="1.0" ?>
  2. <root>
  3.    <name>Radek</name>
  4.    <phone type="mobile">123456789</phone>
  5. </root>


Opis:
Po kliknięciu w 'Otworz', zostaje pobrany numer telefonu (z xml-a 'phone'). W jaki sposob zrobic tak aby ten numer telefonu byl aktualizowany kiedy plik xml zostanie zmodyfikowany?

P.S. Dopiero poczatki w AJAX-ie
matid
  1. <a href="#" onclick="makeRequest( 'default.xml' );setTimeout(\"makeRequest('default.xml');\", 1000 );">Otwórz</a>

Oczywiście tą część z setTimeout możesz też wrzucić gdzie indziej, np. do makeRequest.
kicaj
Nie dziala:(

Głownie chodzi o to, ze jak otworze dana strone to wyswietli mi sie numer telefonu, jednak gdy zmienie wartosc ('phone') to automatycznie zmieni mi sie na stronie.

Jak to zrobic?
orson
witam ...

a nie wystarczy ci że numer będzie zmieniony po odświerzeniu strony questionmark.gif przecież numeru do siebie nie zmieniasz 40 razy na godzinę ...
jeżeli już musisz to tylko setTimeout lub setInterval ... ze strony serwera nie można wymusić aktualizacji po stronie usera ...

pozdrawiam
kicaj
Cytat(orson @ 2005-08-17 10:56:15)
jeżeli już musisz to tylko setTimeout lub setInterval...

Musze musze...

To jak to zastosowac?
orson
witam ...

normanie ... wiesz wogóle co one robią questionmark.gif przecież to banalne ... dodaj gdzieś na początku skryptu
Kod
<script type="text/javascript">
window.setInterval('wyrażenie poprawne do funkcji eval()', czas_w_ms);
</script>


pozdrawiam
kicaj
Juz rozumiem, ale potrzebna byla lekka przebudowa:)
ActivePlayer
Kicaj, przedstaw kod proszę... moze tez cos z tego wyciągnę...
kicaj
Cytat(ActivePlayer @ 2005-08-18 21:44:37)
Kicaj, przedstaw kod proszę...

Proszę:
  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function makeRequest( strFileName )
  4. {
  5. if( window.XMLHttpRequest )
  6. {
  7. resHttpRequest = new XMLHttpRequest();
  8. }
  9. else if( window.ActiveXObject )
  10. {
  11. resHttpRequest = new ActiveXObject( 'Microsoft.XMLHTTP' );
  12. }
  13.  
  14. resHttpRequest.onreadystatechange = createAlert;
  15. resHttpRequest.open( 'GET', strFileName, true );
  16. resHttpRequest.send( null );
  17.  
  18. setTimeout( 'makeRequest( strFileName )', 1500 );
  19. }
  20.  
  21. function createAlert()
  22. {
  23. if( resHttpRequest.readyState == 4 )
  24. {
  25. if( resHttpRequest.status == 200 )
  26. {
  27. var xmlDoc = resHttpRequest.responseXML;
  28. var strPhone = xmlDoc.getElementsByTagName( 'phone' )[0];
  29. document.getElementById( 'displayPhone' ).innerHTML = strPhone.firstChild.data;
  30. }
  31. else
  32. {
  33. alert( 'Problem ze statusem!' );
  34. }
  35. }
  36. }
  37.  
  38. makeRequest( 'default.xml' );
  39.  
  40. </head>
  41.  
  42.  
  43. <div id="displayPhone"></div>
  44.  
  45. </body>
  46. </html>

Aby przetestowac ten kod nalezy recznie (lub poprzez formularz) zmienic wartosc 'phone' w pliku 'default.xml'.
ActivePlayer
analiza:
  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function makeRequest( strFileName )
  4. {
  5. // tutaj widze jakies tworzenie requesta, troszeczke nie wiem dlaczego tak, to pewnie z mojej niewiedzy
  6. if( window.XMLHttpRequest )
  7. {
  8. resHttpRequest = new XMLHttpRequest();
  9. }
  10. else if( window.ActiveXObject )
  11. {
  12. resHttpRequest = new ActiveXObject( 'Microsoft.XMLHTTP' );
  13. }
  14.  
  15. //jesli zmienia status wywołuje funkcje createAlert?
  16. resHttpRequest.onreadystatechange = createAlert;
  17. // wysyła żądanie GETem do strFileName ?
  18. resHttpRequest.open( 'GET', strFileName, true );
  19. //wysyła getem null ? what for ?
  20. resHttpRequest.send( null );
  21.  
  22. // ustawia timeout na siebie, co 1,5s... zastanawiam sie czy to sie nie zapętli przypadkiem
  23. setTimeout( 'makeRequest( strFileName )', 1500 );
  24. }
  25.  
  26. function createAlert()
  27. {
  28.  
  29. if( resHttpRequest.readyState == 4 )
  30. {
  31. // jesli status == 200 ? czemu akurat 200 ?
  32. if( resHttpRequest.status == 200 )
  33. {
  34. // stworz xml doca
  35. var xmlDoc = resHttpRequest.responseXML;
  36. // pobierz 'phone'
  37. var strPhone = xmlDoc.getElementsByTagName( 'phone' )[0];
  38. // i wpisz do diva.
  39. document.getElementById( 'displayPhone' ).innerHTML = strPhone.firstChild.data;
  40. }
  41. else
  42. {
  43. alert( 'Problem ze statusem!' );
  44. }
  45. }
  46. }
  47. // wywołanie make Request...
  48. makeRequest( 'default.xml' );
  49.  
  50. </head>
  51.  
  52. <!-- div w którym wstawiasz value-->
  53. <div id="displayPhone"></div>
  54.  
  55. </body>
  56. </html>
kicaj
questionmark.gif?

Jakies pytania, czy co?
ActivePlayer
w komentarzach są smile.gif prześledź kod dokładniej smile.gif bylbym wdzieczny gdybys mogl odpowiedziec smile.gif
kicaj
ok smile.gif

Tworzenie requesta, czyli uruchamianie, w przegladarkach Mozilla itp jest xmlhttprequest zas u Microsoft uzywa sie tego jako obiekt ActiveX. W wiekszosci wyjasnien o AJAX-ie, mozna o tym poczytac wiecej.

'onreadystatechange' uruchamia funkcje o nazwie createAlert();

Dlaczego GET? Pobieram dane z pliku o nazwie `strFileName`.

Dlaczego wysylam `null`? Rownie dobrze moze byc pusty nawias (przeciez to to samo). Poczytaj wiecej o `open` i `send` w DOM.

Jesli chodzi o `setTimeout()` to sie poprostu "jakby" odswieza sie o liczbe milisekund podanych w drugim parametrze. Petla trwa bez konca, ale bez odczucia dla serwera, przegladarki - uzytkownika.

Dlaczego `readyState == 4`?
Poniewaz:
0 = niezainicjowane
1 = w trakcie pobierania
2 = pobrano
3 = interaktywne
4 = gotowe

Dlaczego `status == 200`?
Poniewz:
200 = OK
404 = Nie odnaleziono
500 = Wewnętrzny błąd serwera
(...jest tego sporo)


Mysle ze jasno wyjasnilem, jak cos to pytaj:)
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.