Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][AJAX] Nie działa skrypt załadowany przez xmlhttp
FoxLis
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.07.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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).

Ten post edytował mortus 30.07.2011, 21:21:19
Go to the top of the page
+Quote Post
FoxLis
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.07.2011

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
FoxLis
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.07.2011

Ostrzeżenie: (0%)
-----


Dzięki. +++
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:15