login  Naam:   Wachtwoord: 
Registreer je!
 Forum

AJAX probleem (Opgelost)

Offline juul - 19/07/2007 21:07 (laatste wijziging 19/07/2007 21:09)
Avatar van juulHTML interesse Ik heb deze code samengesteld aan de hand van een tutorial hier op de site.

  1. function createRequestObject()
  2. {
  3. var req;
  4. if(window.XMLHttpRequest)
  5. {
  6. req = new XMLHttpRequest();
  7. }
  8. else if(window.ActiveXObject)
  9. {
  10. req = new ActiveXObject("Microsoft.XMLHTTP");
  11. }
  12. else
  13. {
  14. alert('Problem creating the XMLHttpRequest object!');
  15. }
  16. return req;
  17. }
  18.  
  19. var http = createRequestObject();
  20.  
  21. function sendRequestServer(id, ip, port)
  22. {
  23.  
  24. http.open('get', './sources/servers_ajax.php?id='+id+'&random='+Math.random());
  25. http.onreadystatechange = handleResponseServer(ip, port);
  26. http.send(null);
  27. }
  28.  
  29. function handleResponseServer(ip, port)
  30. {
  31. if(http.readyState == 4 && http.status == 200)
  32. {
  33. if(http.responseText)
  34. {
  35. document.getElementById("server_"+ip+"_"+port).innerHTML = http.responseText;
  36. }
  37. else
  38. {
  39. document.getElementById("server_"+ip+"_"+port).innerHTML = 'Error';
  40. }
  41. }
  42. else
  43. {
  44. document.getElementById("server_"+ip+"_"+port).innerHTML = '<img src="./images/load.gif" alt="Laden..." />';
  45. }
  46. }


Maar altijd wordt de eerste else van de functie handleResponseServer uitgevoerd. Dus hij ontvangt de info van de pagina blijkbaar niet terwijl dat echt wel zou moeten. Ik had hem eerst werkend maar als ik dan de variablen aan het id ging toevoegen ("server_"+ip+"_"+port) ipv ("server") dan werkte het niet meer.

22 antwoorden

Gesponsorde links
Offline marten - 19/07/2007 21:13 (laatste wijziging 19/07/2007 21:13)
Avatar van marten Beheerder Je moet vooraf de string maken die je wilt dus eerst

  1. var i = eval('server_'+ip+'_'+port);


en dan in je functie gebruik je var i
Offline juul - 19/07/2007 22:53
Avatar van juul HTML interesse Bedankt voor de hulp ik krijg wel deze error in de foutconsole en hij voert gewoon niets uit.

Citaat:
Fout: missing ; before statement
Bronbestand: http://localhost/test/template/ajax.js
Regel: 31, Kolom: 9
Broncode:
server_87.238.171._22003


Regel31:
  1. var divname = eval('server_'+ip+'_'+port);


En ip is een ip en port een port. Wat moet ik eraan veranderen?
Offline marten - 19/07/2007 22:56
Avatar van marten Beheerder Post je nieuwe ajax.js eens
Offline juul - 19/07/2007 22:57
Avatar van juul HTML interesse
  1. function createRequestObject()
  2. {
  3. var req;
  4. if(window.XMLHttpRequest)
  5. {
  6. req = new XMLHttpRequest();
  7. }
  8. else if(window.ActiveXObject)
  9. {
  10. req = new ActiveXObject("Microsoft.XMLHTTP");
  11. }
  12. else
  13. {
  14. alert('Problem creating the XMLHttpRequest object!');
  15. }
  16. return req;
  17. }
  18.  
  19. var http = createRequestObject();
  20.  
  21. function sendRequestServer(id, ip, port)
  22. {
  23.  
  24. http.open('get', './sources/servers_ajax.php?id='+id+'&random='+Math.random());
  25. http.onreadystatechange = handleResponseServer(ip, port);
  26. http.send(null);
  27. }
  28.  
  29. function handleResponseServer(ip, port)
  30. {
  31. var divname = eval('server_'+ip+'_'+port);
  32.  
  33. if(http.readyState == 4 && http.status == 200)
  34. {
  35. if(http.responseText)
  36. {
  37. document.getElementById(divname).innerHTML = http.responseText;
  38. }
  39. else
  40. {
  41. document.getElementById(divname).innerHTML = 'Error';
  42. }
  43. }
  44. else
  45. {
  46. document.getElementById(divname).innerHTML = '<img src="./images/load.gif" alt="Laden..." />';
  47. }
  48. }
Offline marten - 19/07/2007 23:13
Avatar van marten Beheerder Doe eens een alert van divname. Wat zie je dan? En is er een element met het id <divname> ?
Offline juul - 20/07/2007 09:44
Avatar van juul HTML interesse Nee er is geen element met het id divname en hij komt niet tot die alert  
Offline marten - 20/07/2007 09:47
Avatar van marten Beheerder Snap je de JS zelf wel?

  1. document.getElementById(divname).innerHTML =

Deze code zet de resultaat van Ajax in het element met het id <divname>

Als je dus een server,ip,port hebt als server_127.0.0.1_22000 gaat de code dus zoeken naar een div, td of ander element met de naam server_127.0.0.1_22000
Offline juul - 20/07/2007 10:39
Avatar van juul HTML interesse Dat is de bedoeling ik heb een element met het id <div id="server_ip_port"> en daar moet de info van de server met het gevraagde ip en de gevraagde port inkomen.  
Offline willemw - 20/07/2007 11:00
Avatar van willemw Nieuw lid
juul schreef:
Dat is de bedoeling ik heb een element met het id <div id="server_ip_port">


  1. var divname = eval('server_'+ip+'_'+port);

gaat niet "server_ip_port" geven maar eerder iets zoals "server_127.0.0.1_80"
Offline marten - 20/07/2007 11:29 (laatste wijziging 20/07/2007 11:30)
Avatar van marten Beheerder
Citaat:
Dat is de bedoeling ik heb een element met het id <div id="server_ip_port">


Dan zou je dus

  1. var divname = 'server_ip_port';


moeten gebruiken
Offline juul - 20/07/2007 12:30
Avatar van juul HTML interesse Ja het is de bedoeling dat het "server_127.0.0.1_80" dat geeft he. Dus ik snap niet waarom dat het niet zou werken.  
Offline willemw - 20/07/2007 14:22
Avatar van willemw Nieuw lid ok ik kan officieel niet meer volgen. kan je anders eens de bijhorende htmlcode posten of zo?
Offline juul - 20/07/2007 14:38
Avatar van juul HTML interesse http://mta.game-host.org/servers.html Voorbeeld
Offline willemw - 20/07/2007 14:49
Avatar van willemw Nieuw lid aha
volgens mij moet je die eval() laten vallen:
  1. function handleResponseServer(ip, port)
  2. {
  3. var divname ='server_'+ip+'_'+port;
  4. alert(divname);
  5. ...


waarom wil je daar eval() gebruiken trouwens?
Offline juul - 20/07/2007 15:06 (laatste wijziging 20/07/2007 15:26)
Avatar van juul HTML interesse Omdat dat de eerste reactie hier was  

Oke nu ben ik dus al een stukje verder gekomen en heb ik die eval er uitgesmeten. Maar hoe komt het nu dat hij de pagina zelf niet laadt en wel die afbeelding "laden..." Want die pagina bestaat toch echt dus  
Offline willemw - 20/07/2007 15:42
Avatar van willemw Nieuw lid regel 25:
  1. http.onreadystatechange = handleResponseServer(ip, port)


die ip en port kan je zo niet meegeven, je moet ze in een globale var steken
Offline juul - 20/07/2007 16:04
Avatar van juul HTML interesse Hoe doe ik dat?
Offline willemw - 20/07/2007 16:06
Avatar van willemw Nieuw lid door een tutorial te lezen en zelf ook een beetje moeite te doen?

tip: var http = createRequestObject(); is een globale variabele
Offline juul - 20/07/2007 16:10 (laatste wijziging 20/07/2007 16:10)
Avatar van juul HTML interesse
  1. function sendRequestServer(id, ip, port)
  2. {
  3. var ip = ip;
  4. var port = port;
  5.  
  6. http.open('get', '../sources/servers_ajax.php?id='+id+'&random='+Math.random());
  7. http.onreadystatechange = handleResponseServer;
  8. http.send(null);
  9. }
  10.  
  11. function handleResponseServer ()
  12. {
  13. var divname = 'server_'+ip+'_'+port;
  14.  
  15. if(http.readyState == 4 && http.status == 200)
  16. {
  17. if(http.responseText)
  18. {
  19. document.getElementById(divname).innerHTML = http.responseText;
  20. }
  21. else
  22. {
  23. document.getElementById(divname).innerHTML = 'Error';
  24. }
  25. }
  26. else
  27. {
  28. document.getElementById(divname).innerHTML = '<img src="./template/images/load.gif" alt="Laden..." />';
  29. }
  30. }


Dat heb ik nu maar het werkt nog niet  Ik krijg de melding dat ip niet gedefinieerd is...
Offline willemw - 20/07/2007 16:11
Avatar van willemw Nieuw lid bijna 
  1. function sendRequestServer(id, ip, port)
  2. {
  3. var ip = ip;
  4. var port = port;


nu zijn ip en port enkel gedefinieerd binnen sendRequestServer. Dat is NIET wat je wil

je moet eerder dit doen:
  1. var ip;
  2. var port;
  3. function sendRequestServer(id, ip, port)
  4. {
  5. ip = ip;
  6. port = port;
Offline juul - 20/07/2007 16:17
Avatar van juul HTML interesse Oke dat had ik ook juist gevonden in iedergeval zeer hard bedankt het begint nu te werken buiten nog wat bugs maar daar zoek ik zelf wel op.

Alleen zou je misschien een betere manier weten dan onder elke div de volgende code te laten zetten:
  1. <script>
  2. var ip = '{ip}';
  3. var port = {port};
  4. </script>


Want dan krijg je lelijke code met
<div></div>
<script></script>
<div></div>
<script></script>

 
Offline willemw - 20/07/2007 16:20
Avatar van willemw Nieuw lid dat hoeft ook helemaal niet 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s