Ankündigung

Einklappen
Keine Ankündigung bisher.

Php + ajax

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Php + ajax

    Hallo

    ich weiß nicht recht wie ich meinen fall beschrieben soll
    Ich habe im internet ein script gefunden das per klick eine php seite läd/ausführt und mir einen response zurückgeben soll. Funktioniert soweit auch ganz gut, aber wenn ich das alles dann mit meinem script verbinden will passiert einfach nichts mehr.
    Es steht auf der seite einfach immer nur das "processing..."

    Ich hoffe jemand findet etwas im code und kann mir erklären warum das nicht funktioniert. Einzeln funktioniert ja alles
    Code:
     document.getElementById("status").innerHTML = "processing...";

    BTW: ich weiß das die IDs noch unschön sind. Dennoch sollte es ja funktionieren.


    index.php
    Code:
    <form name="testForm" action="" method="">
    code: <input type="text" name="fname" id="fname" /><br />
    <input type="button" value="Submit Form" onclick="postStuff();" />
    </form>
    <div id="status"></div>
    
    <script>
    function postStuff(){
    // Create our XMLHttpRequest object
    var hr = new XMLHttpRequest();
    // Create some variables we need to send to our PHP file
    var url = "xhr.php";
    var fn = document.getElementById("fname").value;
    var vars = "firstname="+fn;
    hr.open("POST", url, true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        console.log(hr);
    
        if(hr.readyState == 4 && hr.status == 200) {
            var return_data = hr.responseText;
            document.getElementById("status").innerHTML = return_data;
        }
    }
    // Send the data to PHP now... and wait for response to update the status div
    hr.send(vars); // Actually execute the request
    document.getElementById("status").innerHTML = "processing...";
    }
    </script>
    xhr.php
    Code:
    <?php
    $command = $_POST['firstname'];
    
    require("q3query.class.php");
    $con = new q3query("secretip", secretport, $success);
    if (!$success) {
        die ("Fehler bei der Verbindungherstellung");
    }
    $con->setRconpassword("secretrconpassword");
    echo $con->rcon("$command");
    }
    ?>
    q3query.class.php
    Code:
    <?php
    
    /* q3query.class.php - Quake 3 query class */
    
    
    class q3query {
    
        private $address;
        private $port;
        private $rconpassword = false;
        private $fp;
        private $lastPing = false;
    
        public function __construct($address, $port, &$success = NULL, &$errno = NULL, &$errstr = NULL) {
            $this->address = $address;
            $this->port = $port;
    
            $this->fp = fsockopen("udp://$address", $port, $errno, $errstr, 5);
            if (!$this->fp) {
                $success = false;
            }
            else {
                $success = true;
            }
        }
    
        public function setRconpassword($pw) {
            $this->rconpassword = $pw;
        }
    
        public function rcon($str) {
            if (!$this->rconpassword) {
                return false;
            }
            $this->send("rcon " . $this->rconpassword . " $str");
            return $this->getResponse();
        }
    
        private function send($str) {
            fwrite($this->fp, "\xFF\xFF\xFF\xFF$str\x00");
        }
    
        private function getResponse() {
            stream_set_timeout($this->fp, 0, 7e5);
            $s = '';
            $start = microtime(true);
            do {
                $read = fread($this->fp, 9999);
                $s .= substr($read, strpos($read, "\n") + 1);
                if (!isset($end)) {
                    $end = microtime(true);
                }
                $info = stream_get_meta_data($this->fp);
            }
            while (!$info["timed_out"]);
    
            $this->lastPing = round(($end - $start) * 1000);
                        
            return $s;
        }
    
        public function quit() {
            if (is_resource($this->fp)) {
                fclose($this->fp);
                return true;
            }
            return false;
        }
    
        public function reconnect() {
            $this->quit();
            $this->__construct($this->address, $this->port);
        }
    
        public function getGameStatus() {
            $this->send("getstatus");
            $response = $this->getResponse();
    
            list($dvarslist, $playerlist) = explode("\n", $response, 2);
    
            $dvarslist = explode("\\", $dvarslist);
            $dvars = array();
            for ($i = 1; $i < count($dvarslist); $i += 2) {
                $dvars[$dvarslist[$i]] = $dvarslist[$i + 1];
            }
    
            $playerlist = explode("\n", $playerlist);
            array_pop($playerlist);
            $players = array();
            foreach ($playerlist as $value) {
                list($score, $ping, $name) = explode(" ", $value, 3);
                $players[] = array(
                    "name" =>substr($name, 1, -1),
                    "score" => $score,
                    "ping" => $ping
                );
            }
    
            return array($dvars, $players);
        }
    
        public function getGameInfo() {
            $this->send("getinfo");
            $response = $this->getResponse();
    
            $dvarslist = explode("\\", $response);
            $dvars = array();
            for ($i = 1; $i < count($dvarslist); $i += 2) {
                $dvars[$dvarslist[$i]] = $dvarslist[$i + 1];
            }
    
            return $dvars;
        }
    
        public function getLastPing() {
            return $this->lastPing;
        }
    }
    
    ?>

  • #2
    Funktioniert soweit auch ganz gut, aber wenn ich das alles dann mit meinem script verbinden will passiert einfach nichts mehr.
    Was sagt denn der Netzwerk monitor in den dev tools deines browsers?

    Kommentar


    • #3
      Zitat von Dormilich Beitrag anzeigen
      Was sagt denn der Netzwerk monitor in den dev tools deines browsers?

      xhr.php status 500

      Failed to load resource: the server responded with a status of 500 (Internal Server Error)
      XMLHttpRequest
      XMLHttpRequest
      Failed to load resource: the server responded with a status of 500 (Internal Server Error)
      POST http://sidewaysinc.eu/rcon/xhr.php 500 (Internal Server Error)
      XMLHttpRequest {readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://sidewaysinc.eu/rcon/xhr.php"…}
      XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, responseURL: "http://sidewaysinc.eu/rcon/xhr.php"…}

      Kommentar


      • #4
        Das erklärt, warum sich der text nicht ändert. Im Fehlerfall macht dein Skript ... nichts.

        Kommentar


        • #5
          Ja das weiß ich auch
          die frage ist ja, warum das passiert. Warum das script einen fehler hat. Ich vermute das es irgendwas mit der q3querry.class.php ist. Denn wenn ich sie nicht drinn habe und einfach ein echo ausgebe funktioniert es ja. Oder kann man per ajax-request nichts requiren/includen?

          Kommentar


          • #6
            Bei einem HTTP 500 sollte sich eigentlich was in den Logs finden lassen.

            EDIT: ich sehe da keine Fehlerbehandlung in der Klasse, wenn die Verbindung nicht zustande kommt ... $success ist eine lokale Variable, die existiert im script file gar nicht.

            Kommentar


            • #7
              daran, die logs meines servers durchzusehen hab ich mal wieder nicht drann gedacht
              fehler gefunden! Vielen dank

              Kommentar

              Lädt...
              X