Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Odświeżanie (ale nie całej strony!)
Forum PHP.pl > Forum > Przedszkole
ignas1987
Hej winksmiley.jpg Mam pytanko za 100 pkt. Chciałem odświeżyć zawartość jednego diva... Jednak... jak się okazuje potrzeba jakiegoś ajaxa (nie śmiać się ;P) no i w necie wyczytyałem że coś takiego można zrobić w java script -> InnerHTML... ale żadnych konkretów... Czy jest ktoś w stanie mi wytłumaczyć? Widziałem także, że są gotowe skrypty js ajax(...).js, ale już te linki nie działają. Dzięki za pomoc winksmiley.jpg A tak wogle to przyznam wam się do czego mi to potrzebne ;P CZAT ;P na stronce

Mam taki kod, ale on mi nie odświeża tego diva co sekunde, tylko to trwa znacznie dłużej:

  1. <script language=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('ajax.php','mojDIVIK');
  39. setTimeout("odswiezaj()", 1000);
  40. }
  41.  
  42. </head>
  43.  
  44. <script language=javascript>
  45. odswiezaj();
  46.  
  47. <div id="mojDIVIK">
  48. </div>
  49.  
  50.  
  51.  
  52. </body>
  53. </html>


[EDIT] Może to z moim localhostem jest cuś nie tak?? :/ ju.z zgłupiałem... niby działa ale nie do końca, bo za długo aktualizuje tego diva [/EDIT]
Chyba jednak temat nie do przejścia... albo tak prosty, że nikomu nie chce sie napisać wstydnis.gif
marcio
  1. <?php
  2.  
  3. $js_scripts = '<script type="text/javascript" src="../cms/mintAjax.js"></script>
  4.               <script type="text/javascript">
  5.  
  6. function refresh() {
  7.    var req = mint.Request();
  8.    req.evalScripts = true;
  9.    req.AddParam("shout", "shout");
  10.    
  11.    req.OnSuccess = function() {
  12.        $("response").innerHTML = this.responseText;
  13.    }
  14.    
  15.    req.Send("./system/check.php");
  16.    setTimeout("refresh()",5000);
  17. }
  18.  
  19. function dodaj() {
  20.  
  21.    var req = mint.Request();
  22.            
  23.       req.OnLoading = function() {
  24.        $("loading").innerHTML = "<center><img src='./grafiki/administration/spinner.gif'> Trwa dodawanie wpisu...</center>";
  25.    }
  26.  
  27.       req.OnLoaded = function() {
  28.        $("loading").innerHTML = "";
  29.    }
  30.  
  31.    req.OnSuccess = function() {
  32.        $("response").innerHTML = this.responseText;
  33.    }
  34.              
  35.    req.SendForm("form");
  36.    window.document.forms.sb.wpis.value="";
  37.    }
  38.  
  39. setTimeout("refresh()",1000);
  40.  
  41. function show(div, div_img) {
  42.  
  43. if(document.getElementById(div).style.display == "none") {
  44. document.getElementById(div).style.display = "block";
  45. document.getElementById(div_img).src="./grafiki/administration/min.gif";
  46.  }
  47. else {
  48. document.getElementById(div).style.display = "none";
  49. document.getElementById(div_img).src="./grafiki/administration/plus.gif";
  50.  }
  51.  
  52. }
  53.  
  54.  
  55. function emoticon() {
  56.  
  57. if(document.getElementById('emoticon').style.display == "none") {
  58. document.getElementById('emoticon').style.display = "block";
  59.  }
  60. else {
  61. document.getElementById('emoticon').style.display = "none";
  62.  }
  63.  
  64. }
  65.  
  66. function insertAtCursor(myField, myValueStart, myValueEnd) {
  67. //IE support
  68. if (document.selection) {
  69. myField.focus();
  70. sel = document.selection.createRange();
  71. sel.text = myValueStart+sel.text+myValueEnd;
  72. }
  73. //MOZILLA/NETSCAPE support
  74. else if (myField.selectionStart || myField.selectionStart == 0) {
  75. var startPos = myField.selectionStart;
  76. var endPos = myField.selectionEnd;
  77. myField.value = myField.value.substring(0, startPos)+ myValueStart+myField.value.substring(startPos,endPos)+myValueEnd+myField.value.substring(endPos, myField.value.length);
  78. } else {
  79. myField.value += myValue;
  80. }
  81. }
  82.  
  83.               </script>';
  84.  
  85.  
  86. ?>

  1. <?php
  2. include('./system/modules/f_m_shout.php');
  3.  
  4. $zawartosc = $js_scripts;
  5.  
  6. if(isset($_COOKIE['username']) && isset($_COOKIE['usercode']) && isset($_COOKIE['userlvl'])) {
  7.  
  8. $zawartosc .= '<table align="center">
  9.               <form action="./system/check.php" method="post" id="form" name="sb">
  10.               <tr><td align="center">
  11.               <textarea name="wpis" rows="3" cols="20" style="background-color:#FFFFFF; color:#bdbdbd; border: 1px solid #bdbdbd;">Wpis</textarea>
  12.               </form>
  13.               </td></tr>
  14.               <tr><td align="center">
  15.               <button onclick="dodaj()" style="background-color:#FFFFFF; color:#bdbdbd; border: 1px solid #000000;width:70%;">Dodaj</button> <img src="./grafiki/administration/smile.gif" onclick="emoticon();" border="0"> <img src="./grafiki/administration/min.gif" id="pokaz" onclick="show('response', 'pokaz'); refresh();" border="0">
  16.               </td></tr></table>';
  17.  
  18. }
  19.  
  20. $zawartosc .= '<div id="emoticon" style="display:none;">
  21.               <fieldset><legend align="center"><b>Emotikony</b></legend>
  22.               <center>
  23.               <img onclick="java script:insertAtCursor(sb.wpis, '',':)')" src="./grafiki/administration/smile.gif" border="0">
  24.               <img onclick="java script:insertAtCursor(sb.wpis, '',';)')" src="./grafiki/administration/wink.gif" border="0">
  25.               <img onclick="java script:insertAtCursor(sb.wpis, '','tongue.gif')" src="./grafiki/administration/pfft.gif" border="0">
  26.               <img onclick="java script:insertAtCursor(sb.wpis, '',':(')" src="./grafiki/administration/sad.gif" border="0">
  27.               <img onclick="java script:insertAtCursor(sb.wpis, '','haha')" src="./grafiki/administration/grin.gif" border="0">
  28.               <img onclick="java script:insertAtCursor(sb.wpis, '',':]')" src="./grafiki/administration/frown.gif" border="0">
  29.               <img onclick="java script:insertAtCursor(sb.wpis, '',';]')" src="./grafiki/administration/cool.gif" border="0">
  30.               </center>
  31.               </fieldset>
  32.               </div>
  33.               <div id="response" style="display:block"></div>';
  34. ?>

Przeanalizuj kod i uzyj jakis FW Ajax'a oczywiscie do tego dochodzi obsluga usuwania/dodawania wpisu do shout'a
ignas1987
hmmm.... z tego co widze to jest kod do shouboxa... jednak mnie chodzi o prostszy kod, bez emotikonek itd... chodzi o samo odświeżanie diva... bo w tym konkretnym divie ma wyświetlać się tekst, jeżeli chodzi o emoty to używam str_replace
marcio
Man wszystko podane na tacy look at the function refresh() and think a little bit tongue.gif

A myslisz ze ja dla emotikon to co uzywam nawet ze str_replacwe to nie najlepsze wyjscie
ignas1987
spoko loko winksmiley.jpg Dzięki... jednak dzisiaj już dokładnie nie przeanalizuje kodu tongue.gif bo juz mi mózg paruje, hehehe. Pozdro
nexis
Cytat(ignas1987 @ 5.06.2009, 22:17:12 ) *
Chciałem odświeżyć zawartość jednego diva

Najprościej chyba za pomocą jQuery i funkcji load():

Kod
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
function update(){
    $("#cel").load("/adres/strony.html #zrodlo");
    // Kolejne odświeżenia co sekundę (1s = 1000 ms)
    setTimeout("update()", 1000);
}
$(document).ready(function(){
    // Pierwsze odświeżenie po wczytaniu biblioteki jQuery
    update();
});
</script>
ignas1987
  1. <script type="text/javascript">
  2. function refresh() {
  3.  
  4. var req = mint.Request();
  5. req.OnSuccess = function () { document.getElementById("odswiezaj").innerHTML = this.responseText;},
  6. req.OnError = function () {document.getElementById("odswiezaj").innerHTML = "Wystąpił błąd !!! </br>" + this.responseText + "</br>" + req.xmlHttpRequest.statusText ;}
  7. req.Set(config).Send ("plik.php");
  8. }
  9. var ginter=setInterval(refresh, 1000);
  10. </head>
  11.  
  12.  
  13. <div id="odwiezaj">
  14. <?php include("plik.php"); ?>
  15. </div>
  16.  
  17. </body>
  18. </html>


Wystąpił błąd na stronie :/ Where?? sciana.gif
kamil4u
FF ma dobrą konsolę błędów - pokaż jaki to błąd smile.gif

Masz wczytaną bibliotekę AJAX-a? Z tego co widzę mintAjax-a ?
ignas1987
No właśnie o to chodzi że nie wiem tongue.gif bo ten kod ściągnałem z neta ;P nie wiem w jakie znaczniki to umieścić :/ <lol>, na tamtej stronie koleś dał tylko środek... a co nazewnątrz... nie wiem, czy to javascript src... itd to nie wiem... :/ Mógłbyś pomóc...
Spawnm
pobierasz z neta pliczek js mintajax i przez <script> dodajesz go przed swoim kodem .

http://mintajax.pl/Przewodnik/
ignas1987
NIestety... nie wiem... ale cuś jest źle...

plik index.php
  1. <script type="text/javascript" src="mintAjax.js"></script>
  2. <script type="text/javascript">
  3. function refresh() {
  4.  
  5. var req = mint.Request();
  6. req.OnSuccess = function () { document.getElementById("odswiezaj").innerHTML = this.responseText;},
  7. req.OnError = function () {document.getElementById("odswiezaj").innerHTML = "Wystąpił błąd !!! </br>" + this.responseText + "</br>" + req.xmlHttpRequest.statusText ;}
  8. req.Set(config).Send ("plik.php");
  9. }
  10. var ginter=setInterval(refresh, 1000);
  11. </head>
  12.  
  13.  
  14. <div id="odwiezaj">
  15. <?php include("plik.php"); ?>
  16. </div>
  17.  
  18. </body>
  19. </html>

w pliku plik.php jest zapisywana rozmowa pomiędzy ludźmi...
erix
Cytat
NIestety... nie wiem... ale cuś jest źle...

Ała, moja szklana kula spadła mi na głowę... sad.gif

Coś, czyli co?
Spawnm
a plik mintajax.js jest w tym samym katalogu co index.php ? Bo tak go includujesz .
ignas1987
W tym samym katalogu. Po prostu wogle sie nie odświeża i na pasku na dole "wystąpił błąd" :/
kamil4u
Patrzyłeś na konsolę błędów w FF ew. w Operze (tylko nie IE, z Chrome nie wiem jaka tam konsola jest i czy się do czegoś nadaje tongue.gif )?
ignas1987
Cytat(kamil4u @ 6.06.2009, 15:37:26 ) *
tylko nie IE

hehe :/ używam IE, niestety, ale też chciałbym żeby na IE działało
kamil4u
To też podaj błąd (znając życie dużo nie pomoże, ale raz na 100 przypadków się trafia, może Tobie też się uda)
Cytat
req.Set(config).Send ("plik.php");

A gdzie masz zmienną config?
ignas1987
hehehe... Powiem szczerze... javascript jest dla mnie jak chiński ;P ja takie skrypty tylko kopiuje ;P a tak naprawde nie wiem co do czego wstydnis.gif
mszm
Manual:

Funkcja Set może zostać wywołana z jednym parametrem będącym obiektem zawierającym pary "atrybut: wartość" do ustawienia w obiekcie Request, funkcja ta przydatna jest przede wszystkim w przypadku korzystania z tych samych ustawień w kilku obiektach Request, przykładowo:

Kod
var config = {
        username : "lorem",
        password : "ipsum",
        encoding : "iso-8859-2",
        evalScripts : true
    }

    mint.Request().Set(config).Send("first_request.php");
    mint.Request().Set(config).Send("second_request.php");
kamil4u
Spróbuj ta linkę zamienić na:
Kod
req.Send("plik.php");


Przeczytaj "Przewodnik" mintAjax-u i zrób kilka skryptów według przykładów tam zamieszczonych, później wróć do nas już z działającym prawdopodobnie kodem. Poczytaj też problemu z tamtejszego forum. I zmień przeglądarkę jeśli jest taka możliwość lub zainstaluj sobie IE8 (podobno ma dużo mniej błędów)
marcio
Podalem ci funkcje refresh(), formularz tu masz obsluge funkcji refersh() z pod php to ponizej ma byc w pliku check.php mozesz nazwe zmienic rob zrobic wszystko w jednym pliku:
  1. <?php
  2. if(isset($_GET['shout'])) {
  3.  
  4. /*
  5.  
  6. Pobierasz dane z bazy i wyswietlasz wszystko
  7.  
  8. */
  9.  
  10. }
  11. ?>

To co nawet code&paste ci nie dziala??

Tak jak powiedzieli musisz miec lib'a mintajax'a w katalogu gdzie masz index i tyle.
ignas1987
Temat do zamknięcia.

Zbieram wszystko w całość

PLIK index.php
  1. <script type="text/javascript" src="mintAjax.js"></script>
  2.  
  3.  
  4. <script type="text/javascript">
  5.  
  6. var config = {
  7. username : "lorem",
  8. password : "ipsum",
  9. encoding : "iso-8859-2",
  10. evalScripts : true
  11. }
  12.  
  13. mint.Request().Set(config).Send("first_request.php");
  14. mint.Request().Set(config).Send("second_request.php");
  15.  
  16. function refresh() {
  17. var req = mint.Request();
  18. req.OnSuccess = function () { document.getElementById("odswiezaj_mnie").innerHTML = this.responseText;},
  19. req.OnError = function () {document.getElementById("odswiezaj_mnie").innerHTML = "Wystąpił błąd !! ! </br>" + this.responseText + "</br>" + req.xmlHttpRequest.statusText ;}
  20. req.Send("plik.php");
  21. }
  22. var ginter=setInterval(refresh, 5000);
  23.  
  24. </script>
  25.  
  26.  
  27. </head>
  28.  
  29. <body onload="refresh()" >
  30.  
  31.  
  32. <div id="odswiezaj_mnie">
  33. <?php include("plik.php"); ?>
  34. </div>
  35.  
  36. </body>
  37. </html>




PLIK plik.php (tu można wstawić wszystko co chce sie odświeżać, ja wstawiłem wczytywanie czasu sekund na serwerze)
  1. <?php
  2. echo (date(s));
  3. ?>


DZIĘKI WSZYSTKIM guitar.gif

jeezuuu... dlaczego po edycji znika mi część tekstu... zauważyłem literówki - poprawiłem a tu... zonk zjadło mi kod PHP
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.