Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ajax i JS
Forum PHP.pl > Forum > XML, AJAX
nc715
Witam,
zacząłem właśnie stosować ajaxa i na dzień dobry mam problem smile.gif

poniżej jest funkcja która działa dobrze łączy się z bazą i wyświetla tabelkę. ( w pliku wyszukaj_produkt.php jest łączenie z bazą i wypisanie tabelki )

  1. function wyszukajProdukt() {
  2. var adres_url = "include/wyszukaj_produkt.php";
  3. var parametry = "wyrazenie=" + encodeURI(document.getElementById('wyrazenie').value);
  4. mojeZadanie.open("POST", adres_url, true);
  5. mojeZadanie.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  6. mojeZadanie.setRequestHeader("Content-length", parametry.length);
  7. mojeZadanie.setRequestHeader("Connection", "close");
  8. mojeZadanie.onreadystatechange = wyniki;
  9. mojeZadanie.send(parametry);
  10. }
  11.  
  12. function wyniki() {
  13. if (mojeZadanie.readyState == 4) {
  14. if(mojeZadanie.status == 200) {
  15. wynik = mojeZadanie.responseText;
  16. document.getElementById('tabela_produkty').innerHTML = wynik;
  17. } else {
  18. document.getElementById('tabela_produkty').innerHTML = '<img src="images/ajax-ladowanie.gif"/>';
  19. }
  20. }
  21. }


Problem jest gdy chcę zrobić coś na tej tabelce za pomocą js.

  1. $("#tabela_produkty tr").hover(function(){$(this).addClass("active");},function(){$(this).removeClass("active");});


i nie działa, js nie widzi tej tabelki w ogóle, chociaż na ekranie jest wyświetlona
co robię źle, może to nie ma prawa działać? i jak to ewentualnie zrobić

Pozdrawiam serdecznie
erix
A cały kod? Bez kontekstu, to możemy sobie gdybać.

Najlepiej na jsFiddle.
nc715
nie da rady na jsFiddle bo w kodzie jest php

index.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3.  
  4. <meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
  5. <meta http-equiv="Content-Language" content="pl" />
  6. <link rel="stylesheet" type="text/css" href="css/styles.css" />
  7. <script type="text/javascript" src="js/jquery.min.js"></script>
  8.  
  9. </head>
  10.  
  11. <script type="text/javascript">
  12. function pobierzZadanieXMLHTTP() {
  13. var zadanie = false;
  14. try {
  15. /* dla przeglądarki Firefox */
  16. zadanie = new XMLHttpRequest();
  17. } catch (blad) {
  18. try {
  19. /* dla niektórych wersji przeglądarki IE */
  20. zadanie = new ActiveXObject("Msxml2.XMLHTTP");
  21. } catch (blad) {
  22. try {
  23. /* dla pozostałych wersji przeglądarki IE */
  24. zadanie = new ActiveXObject("Microsoft.XMLHTTP");
  25. } catch (blad) {
  26. zadanie = false;
  27. }
  28. }
  29. }
  30. return zadanie;
  31. }
  32.  
  33. function wyszukajProdukt() {
  34. var adres_url = "include/wyszukaj_produkt.php";
  35. var parametry = "wyrazenie=" + encodeURI(document.getElementById('wyrazenie').value);
  36. mojeZadanie.open("POST", adres_url, true);
  37. mojeZadanie.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  38. mojeZadanie.setRequestHeader("Content-length", parametry.length);
  39. mojeZadanie.setRequestHeader("Connection", "close");
  40. mojeZadanie.onreadystatechange = wyniki;
  41. mojeZadanie.send(parametry);
  42. }
  43.  
  44. function wyniki() {
  45. if (mojeZadanie.readyState == 4) {
  46. if(mojeZadanie.status == 200) {
  47. wynik = mojeZadanie.responseText;
  48. document.getElementById('tabela_produkty').innerHTML = wynik;
  49. } else {
  50. document.getElementById('prezentacjawynikow').innerHTML = '<img src="images/ajax-ladowanie.gif"/>';
  51. }
  52. }
  53. }
  54.  
  55. var mojeZadanie = pobierzZadanieXMLHTTP();
  56. <form action="" method="post">
  57. <input type="text" id="wyrazenie" name="wyrazenie" />
  58. <input type="button" value="wyślij" onclick="java script:wyszukajProdukt();" />
  59. </form>
  60. <table id="tabela_produkty"></table>
  61.  
  62.  
  63. <script type="text/javascript">
  64. $("#tabela_produkty tr").hover(function(){$(this).addClass("active");},function(){$(this).removeClass("active");});
  65. <?php
  66. </body>
  67. </html>
  68.  


a plik wyszukaj_produkt.php :
  1. $db = db_connect();
  2.  
  3. $zapytanie = "select * from produkty where produkt like '%".$wyrazenie."%'";
  4. $wynik = $db->query($zapytanie);
  5.  
  6. while ($wiersz = $wynik->fetch_assoc()) {
  7. echo "<tr><td>".$wiersz['produkt_id']."</td><td>".$wiersz['produkt']."</td></tr>";
  8. }
nospor
Przecież o to:
$("#tabela_produkty tr").hover(function(){$(this).addClass("active");},function(){$(this).removeClass("active");});
wykona się dużo wcześniej niż załaduje się tabelka w AJAX więc nie ma się dziwić że ci to nie działa, skoro to operuje na tabeli, której jeszcze nie ma....
nc715
czyli co mam zrobić, aby takie coś działało? arrowheadsmiley.png
nospor
No nie wiem.... może trochę pomyślećquestionmark.gif
Skoro przed pojawieniem się to zły pomysł, to moze warto wykonywać ten kod po pojawieniu się tabeli?
erix
Zacząć myśleć i zrozumieć własny kod.

Podpowiedź: jest wykonywany od góry do dołu.
nc715
dzieki...
nospor
erix twoja podpowiedź jest nie prawidłowa. Co z tego że od góry do dołu? Wg takiego schematu to jego kod powinien działać. A nie działa, bo AJAX wykonuje się dłużej, dlatego kod, który jest poniżej, i tak wykonuje się przed zwrotem AJAX, który jest powyżej.

@autor: daj ten kod albo w kodzie zwracanym z ajax, albo podepnij się pod zdarzenie kończące ajax
nc715
Cytat(nospor @ 16.08.2012, 16:03:35 ) *
daj ten kod albo w kodzie zwracanym z ajax, albo podepnij się pod zdarzenie kończące ajax


zadziałało jak się podpiąłem pod zdarzenie końcowe ajax

Problem rozwiązany

Dzięki nospor 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.