Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][AJAX] Nie działa skrypt załadowany przez xmlhttp
Forum PHP.pl > Forum > Przedszkole
FoxLis
Cześć.
Załóżmy, że mam standardowy kod dostępny w internecie:

  1. <script type="text/javascript">
  2. function showUser(str)
  3. {
  4. if (str=="")
  5. {
  6. document.getElementById("txtHint").innerHTML="";
  7. return;
  8. }
  9. if (window.XMLHttpRequest)
  10. {// code for IE7+, Firefox, Chrome, Opera, Safari
  11. xmlhttp=new XMLHttpRequest();
  12. }
  13. else
  14. {// code for IE6, IE5
  15. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  16. }
  17. xmlhttp.onreadystatechange=function()
  18. {
  19. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  20. {
  21. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24. xmlhttp.open("GET","getuser.php?q="+str,true);
  25. xmlhttp.send();
  26. }
  27. </head>
  28.  
  29. <select name="users" onchange="showUser(this.value)">
  30. <option value="">Select a person:</option>
  31. <option value="1">Peter Griffin</option>
  32. <option value="2">Lois Griffin</option>
  33. <option value="3">Glenn Quagmire</option>
  34. <option value="4">Joseph Swanson</option>
  35. </form>
  36. <br />
  37. <div id="txtHint"><b>Person info will be listed here.</b></div>
  38.  
  39. </body>
  40. </html>



getuser.php
  1. <?php
  2. $q=$_GET["q"];
  3.  
  4. $con = mysql_connect('localhost', 'peter', 'abc123');
  5. if (!$con)
  6. {
  7. die('Could not connect: ' . mysql_error());
  8. }
  9.  
  10. mysql_select_db("ajax_demo", $con);
  11.  
  12. $sql="SELECT * FROM user WHERE id = '".$q."'";
  13.  
  14. $result = mysql_query($sql);
  15.  
  16. echo "<table border='1'>
  17. <tr>
  18. <th>Firstname</th>
  19. <th>Lastname</th>
  20. <th>Age</th>
  21. <th>Hometown</th>
  22. <th>Job</th>
  23. </tr>";
  24.  
  25. while($row = mysql_fetch_array($result))
  26. {
  27. echo "<tr>";
  28. echo "<td>" . $row['FirstName'] . "</td>";
  29. echo "<td>" . $row['LastName'] . "</td>";
  30. echo "<td>" . $row['Age'] . "</td>";
  31. echo "<td>" . $row['Hometown'] . "</td>";
  32. echo "<td>" . $row['Job'] . "</td>";
  33. echo "</tr>";
  34. }
  35. echo "</table>";
  36.  
  37. ?>



Do kodu wczytywanego przez AJAX dodaje:
  1. <select name="lista2" onchange="alert('dadad')">




Wszystkie się pięknie ładuje, natomiast nie działa wczytany kod JS. Po prostu nie wyskakuje alert.

Jak zrobić, aby wczytany kod JS działała poprawnie? Dodam, że kod z select będzie również wczytywać tekst z plików PHP do pola pobranego razem z wywoływaczem, czyli nie działającym select-alert.
mortus
Niestety tak łatwo nie będzie. Chyba, że użyjesz któregoś z istniejących frameworków JavaScript (jQuery, Prototype, itp.). W przeciwnym razie będziesz musiał napisać sobie funkcję, która na podstawie pobranej przez XMLHttpRequest odpowiedzi zaktualizuję Ci strukturę DOM Twojej strony (standardowy innerHTML tego nie robi).
FoxLis
Czyli jak powinienem to rozwiązać?
Mogę użyć jQuery (i wtedy działa, wczytane elementy obsługują funkcje).

Nie wiem jak ten kod przerobić na kod jQuery bo prawie taka sama jest wywoływana, trochę się różni ale to już umiem zrobić ale nie wiem jak poniższą zapisać w jQuery:
  1. <script type="text/javascript">
  2. function showUser(str)
  3. {
  4. if (str=="")
  5. {
  6. document.getElementById("txtHint").innerHTML="";
  7. return;
  8. }
  9. if (window.XMLHttpRequest)
  10. {// code for IE7+, Firefox, Chrome, Opera, Safari
  11. xmlhttp=new XMLHttpRequest();
  12. }
  13. else
  14. {// code for IE6, IE5
  15. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  16. }
  17. xmlhttp.onreadystatechange=function()
  18. {
  19. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  20. {
  21. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24. xmlhttp.open("GET","getuser.php?q="+str,true);
  25. xmlhttp.send();
  26. }
mortus
W jQuery Twoja funkcja to tylko kilka linijek:
  1. <script type="text/javascript">
  2. function showUser(str) {
  3. if(str=="") {
  4. document.getElementById("txtHint").innerHTML="";
  5. return ;
  6. }
  7. $.get("getuser.php", { q: str }, function(response){
  8. $("#txtHint").html(response);
  9. });
  10. }
FoxLis
Dzięki. +++
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.