Autor Zpráva
TomasJ
Profil
Ahoj potřebuji každé 2 sekundy přepisovat obsah jednoho <div> ale responseText mi vrací prázdný řetězec... Nevíte proč?

  <script type="text/javascript">
    function UpdatePlayers() {
      var httpRequest;
      if (typeof window.ActiveXObject != "undefined") {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      else {
        httpRequest = new XMLHttpRequest();
      }
      
      httpRequest.open("GET", "players.php", true);
      httpRequest.onreadystatechange = function() {
        ProcessPlayers(httpRequest); 
      };
      httpRequest.send(null);
    }
    
    function ProcessPlayers(httpRequest) {
      if (httpRequest.readyState == 4) {
          document.getElementById("map").innerHTML = httpRequest.responseText;
      }
    }
  
    setInterval("UpdatePlayers()", 2000);
  </script>


V souboru players.php je vše správně, to jsem zkoušel... Děkuji za pomoc.
Bronzi
Profil
Problém je v tom, že proměnou httpRequest nedostaneš jako argument funkce ProcessPlayers ale musíš si jí uložit bokem.
Takto by to mělo fungovat:

  <script type="text/javascript">
    var httpRequest;
    function UpdatePlayers() {
      if (typeof window.ActiveXObject != "undefined") {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      else {
        httpRequest = new XMLHttpRequest();
      }
      
      httpRequest.open("GET", "players.php", true);
      httpRequest.onreadystatechange = function() {
        ProcessPlayers(httpRequest); 
      };
      httpRequest.send(null);
    }
    
    function ProcessPlayers() {
      if (httpRequest.readyState == 4) {
          document.getElementById("map").innerHTML = httpRequest.responseText;
      }
    }
  
    setInterval("UpdatePlayers()", 2000);
  </script>
TomasJ
Profil
Díky, ale pořád to nejde, je to úplně to samé :-/

Kód jsem zpřehlednil a nyní ho mám takto, nicméně nejde...

  <script type="text/javascript">
    var httpRequest;
    function UpdatePlayers()
    {
      if(typeof window.ActiveXObject != "undefined") httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      else httpRequest = new XMLHttpRequest();
      httpRequest.open("GET", "players.php", true);
      httpRequest.onreadystatechange = ProcessPlayers;
      httpRequest.send(null);
    }
    
    function ProcessPlayers() document.getElementById("map").innerHTML = httpRequest.responseText;
    setInterval("UpdatePlayers()", 2000);
  </script>
Chamurappi
Profil
Reaguji na Bronziho:
proměnou httpRequest nedostaneš jako argument funkce ProcessPlayers
Proč by ji nedostal? Globální proměnnou nepotřebuje.


Reaguji na TomaseJ:
Kód jsem zpřehlednil
To bych neřekl. Na řádku 12 jsi ho i rozbil odmazáním závorek (což bohužel v Mozille funguje).

Nejspíš budeš mít chybu ve skriptu na straně serveru. Jsi-li si jistý, že players.php něco vrací, prosím o odkaz na živou ukázku.
TomasJ
Profil
http://samp.k3s4.sk/gamemap.php
První 2 sekundy je vše na mapě načtené z players.php... players.php je ve stejné složce.
Chamurappi
Profil
Reaguji na TomaseJ:
Hlásí mi to syntaktickou chybu kvůli té chybějící závorce, o které jsem se před půl hodinou zmiňoval. Proč mi házíš klacky pod nohy?
V Mozille mi players.php skutečně vrací prázdný řetězec. Příčina problému není v JS.
TomasJ
Profil
Jenže první 2 sekundy (než se JS skript spustí) jsou body na té mapě generované tím players.php, jen je to includované do
<div id="map"></div>

Takto:
<?php
echo '<div id="map">';
include('players.php');
echo '</div>';
?>



Omlouvám se, chyba byla v tom, že jsem includoval soubor s PHP definicí na soubor který se má načíst, jenže v samotném players.php nebyl, byl pouze v tom gamemode.php... Tak se omlouvám za zmatení :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0