Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX]Problem z divami
Forum PHP.pl > Forum > Przedszkole
slawek3422
Witam.
Mam następujący problem.
Na stronie mam BUTTONA, do którego mam podpięte zdarzenie onClick. Po kliknięciu uruchamiam dwie funkcje. No i do tego momentu wszystko OK.
Problem jest w uzyskaniu odpowiedzi z serwera. Zawsze dostaję tylko jedną odpowiedź do jednego z dwóch divów. Drugi div jest pusty.

Gdzie robię błąd ?

Plik index.htm (fragment)
  1. <script language="javascript" src="script.js"></script>
  2. <input type="button" value="1421" onclick="sprawdz1(this.value), sprawdz(this.value);">
  3.  
  4.  
  5. <div id="zawartosc"></div>
  6. <div id="tresc"></div>


Plik script.js
  1. var xmlHttp;
  2.  
  3. function sprawdz(str)
  4. {
  5.  
  6. xmlHttp=GetXmlHttpObject();
  7. var url="1.php";
  8. url=url+"?haslo="+str;
  9. url=url+"&sid="+Math.random();
  10. alert(url);
  11. xmlHttp.onreadystatechange=stateChanged;
  12. xmlHttp.open("GET",url,true);
  13. xmlHttp.send(null);
  14. }
  15.  
  16. function sprawdz1(str)
  17. {
  18.  
  19. xmlHttp=GetXmlHttpObject();
  20. var url="2.php";
  21. url=url+"?haslo="+str;
  22. url=url+"&sid="+Math.random();
  23. alert(url);
  24. xmlHttp.onreadystatechange=stateChanged;
  25. xmlHttp.open("GET",url,true);
  26. xmlHttp.send(null);
  27. }
  28.  
  29. function stateChanged()
  30. {
  31. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  32. {
  33. document.getElementById("tresc").innerHTML=xmlHttp.responseText;
  34. }
  35. }
  36. function stateChanged1()
  37. {
  38. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  39. {
  40. document.getElementById("zawartosc").innerHTML=xmlHttp.responseText;
  41. }
  42. }
  43.  
  44. function GetXmlHttpObject()
  45. {
  46. var xmlHttp=null;
  47. try
  48. {
  49. // Firefox, Opera 8.0+, Safari
  50. xmlHttp=new XMLHttpRequest();
  51. }
  52. catch (e)
  53. {
  54. //Internet Explorer
  55. try
  56. {
  57. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  58. }
  59. catch (e)
  60. {
  61. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  62. }
  63. }
  64. return xmlHttp;
  65. }


w plikach 1.php i 2.php mam zwykłe echa.

Po kliknięciu na button w odpowiedzi mam tylko zawartość jednego pliku, tylko pierwsza funkcja zwraca wynik. Jak uzyskać obydwa wyniki ?
Suh
W Twoich funkcjach sprawdz() i sprawdz1() masz w xmlHttp.onreadystatechange odwołanie tylko do stateChange, a nie ma do stateChange1.
slawek3422
zgadza się, walnąłem literówkę, jednak po zmianie na
  1. var xmlHttp;
  2.  
  3. function sprawdz(str)
  4. {
  5.  
  6. xmlHttp=GetXmlHttpObject();
  7. var url="1.php";
  8. url=url+"?haslo="+str;
  9. url=url+"&sid="+Math.random();
  10. alert(url);
  11. xmlHttp.onreadystatechange=stateChanged;
  12. xmlHttp.open("GET",url,true);
  13. xmlHttp.send(null);
  14. }
  15.  
  16. function sprawdz1(str)
  17. {
  18.  
  19. xmlHttp=GetXmlHttpObject();
  20. var url="2.php";
  21. url=url+"?haslo="+str;
  22. url=url+"&sid="+Math.random();
  23. alert(url);
  24. xmlHttp.onreadystatechange=stateChanged1;
  25. xmlHttp.open("GET",url,true);
  26. xmlHttp.send(null);
  27. }
  28.  
  29. function stateChanged()
  30. {
  31. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  32. {
  33. document.getElementById("tresc").innerHTML=xmlHttp.responseText;
  34. }
  35. }
  36. function stateChanged1()
  37. {
  38. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  39. {
  40. document.getElementById("zawartosc").innerHTML=xmlHttp.responseText;
  41. }
  42. }
  43.  
  44. function GetXmlHttpObject()
  45. {
  46. var xmlHttp=null;
  47. try
  48. {
  49. // Firefox, Opera 8.0+, Safari
  50. xmlHttp=new XMLHttpRequest();
  51. }
  52. catch (e)
  53. {
  54. //Internet Explorer
  55. try
  56. {
  57. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  58. }
  59. catch (e)
  60. {
  61. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  62. }
  63. }
  64. return xmlHttp;
  65. }


dalej nie działa, alerty pokazują dobre dane
Suh
hmm.. wiesz co, spróbuj może usunąć zmienną globalną xmlHttp i daj jej zasięg lokalny w każdej funkcji.
Ciężko mi coś doradzić bo sam nigdy nie robiłem takich akcji dla dwóch div'ów.
Domyślam się, że zawartość jest generowana w divie o id="tresc" ?

Jeżeli zmiana zasięgu tej zmiennej nie pomoże, to będziemy myśleć dalej.

EDIT.
Albo wiesz co, zrób sobie jeszcze jedna zmienna gobalną powiedzmy xmlHttp1 i daj ją w każdej funkcji z końcówka 1 w nazwie.
Spróbuj w ten sposób bo coś mi sie zdaje, że poprostu zmienna xmlHttp się nadpisuje w trakcie wykonania.
slawek3422
Super smile.gif działa, dzięki Suh za naprowadzenie smile.gif
kod skryptu, który mi zadziałał wygląda tak:
  1. var xmlHttp;
  2.  
  3. function sprawdz(str)
  4. {
  5.  
  6. xmlHttp=GetXmlHttpObject();
  7. var url="1.php";
  8. url=url+"?haslo="+str;
  9. url=url+"&sid="+Math.random();
  10. alert(url);
  11. xmlHttp.onreadystatechange=stateChanged;
  12. xmlHttp.open("GET",url,true);
  13. xmlHttp.send(null);
  14. }
  15.  
  16. function sprawdz1(str)
  17. {
  18.  
  19. xmlHttp1=GetXmlHttpObject();
  20. var url="2.php";
  21. url=url+"?haslo="+str;
  22. url=url+"&sid="+Math.random();
  23. alert(url);
  24. xmlHttp1.onreadystatechange=stateChanged1;
  25. xmlHttp1.open("GET",url,true);
  26. xmlHttp1.send(null);
  27. }
  28.  
  29. function stateChanged()
  30. {
  31. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  32. {
  33. document.getElementById("tresc").innerHTML=xmlHttp.responseText;
  34. }
  35. }
  36. function stateChanged1()
  37. {
  38. if (xmlHttp1.readyState==4 || xmlHttp1.readyState=="complete")
  39. {
  40. document.getElementById("zawartosc").innerHTML=xmlHttp1.responseText;
  41. }
  42. }
  43.  
  44. function GetXmlHttpObject()
  45. {
  46. var xmlHttp=null;
  47. try
  48. {
  49. // Firefox, Opera 8.0+, Safari
  50. xmlHttp=new XMLHttpRequest();
  51. }
  52. catch (e)
  53. {
  54. //Internet Explorer
  55. try
  56. {
  57. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  58. }
  59. catch (e)
  60. {
  61. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  62. }
  63. }
  64. return xmlHttp;
  65. }


w jednej z funkcji zamieniłem xmlHttp na xmlHttp1 i ruszyło smile.gif
Wielkie dzięki, pozdrawiam smile.gif
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.