Kein Ajax Request nach MYSQL Delete

chipo

Grünschnabel
Hi,

ich führe mit diesem Code einen Ajaxrequest aus. Kommt ein ein response zurück soll die Seite neu geladen werden:

Code:
<script type="text/javascript">
var xmlhttpreq = null;

function GetHTTPRequest() {
  var xmlhttp = false;
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (trymicrosoft) {
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (othermicrosoft) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (failed) {
          xmlhttp = false;
        }
      }
    }
  return xmlhttp;
}

xmlhttpreq = GetHTTPRequest();

function StartRequest() {
  // Persistente Verbindung öffnen
  var timestamp = Math.floor(new Date().getTime()/1000);
  xmlhttpreq.open('GET', 'newspoll.php?timestamp='+timestamp, true);
  xmlhttpreq.onreadystatechange = handle_response;
  xmlhttpreq.send(null);

 

}

function handle_response() {
  if (xmlhttpreq.readyState==4 && xmlhttpreq.status==200) {
    location.reload();
  }
  // Bei Verbindungsabbruch gleich neu initialisieren
  if (xmlhttpreq.readyState==4) {
    StartRequest();
  }
}
</script>


Die newspoll.php sieht so aus:

PHP:
<?php
set_time_limit(0);
include ("db.php");
$timestamp = $_GET["timestamp"];

$i = 1;
do
{
$time = time();


$abfrage = "SELECT * FROM news WHERE zeit < $time";
$ergebnis = mysql_query($abfrage);
$num = mysql_num_rows($ergebnis);
If ($num > 0)
    {
    echo "ja";
    $i = 0;
    $loesch = mysql_query("DELETE FROM news WHERE zeit < $time");
    }


$abfrage = "SELECT * FROM news WHERE erstell > $timestamp";
$ergebnis = mysql_query($abfrage);
$num = mysql_num_rows($ergebnis);
If ($num > 0)
    {
    echo "ja";
    $i = 0;
    }

sleep(2);
}
while ($i > 0);
?>

Das Problem ist nun die erste Select Abfrage. Hier wird bei einem Treffer richtig mit "mysql_query("DELETE FROM news WHERE zeit < $time")" der Wert aus der DB gelöscht aber keine Antwort an das Ajax geschickt. Wenn ich allerdings "mysql_query("DELETE FROM news WHERE zeit < $time")" weg lasse wird eine Antwort an die Ajaxseite geschickt und die Seite aktuallisiert.
 
Moin chipo,

das lässt sich aus der Ferne nur schwer sagen, woran es liegt.

Schaue doch mal in Firebug im Netzwerk-TAB nach, was dort vor sich geht.
 
Also habe es mir nun in Firebug mal angeschaut und das ist nun noch verwirrender als vorher, denn es kommt ein Request ("ja") nach der Löschabfrage zurück. Nur das Ajax erkennt/reagiert scheinbar warum auch immer nicht darauf :(.
 
Ja ist Status 200 und wird auch wieder wie es sein soll eine neue Verbindung vom Ajax aufgebaut, aber der Seitenreload bleibt aus.
 
Hi,

ich habe keine Ahnung ob es hilft, aber mich stört z.B. das du die echos mitten in der Schleife zurück gibst.
Hast du schonmal probiert nur einen String zu erstellen und dann nach dem while das echo zu machen?

ungefähr so:
Code:
$strResponse = "";
do
{
   if(x==y)
   {
      $strResponse = "ja"
   }
}
while

echo($strRepsonse);
 
Hatte ich auch schon, bin sogar nun soweit gegangen das so zu machen

PHP:
<?php
set_time_limit(0);
include ("db.php");
$timestamp = $_GET["timestamp"];

$i = 1;
do
{
$time = time();


$abfrage = "SELECT * FROM news WHERE zeit < $time";
$ergebnis = mysql_query($abfrage);
$num = mysql_num_rows($ergebnis);
If ($num > 0)
    {
    $i = 0;
    $loesch = mysql_query("DELETE FROM news WHERE zeit < $time");
    }


$abfrage = "SELECT * FROM news WHERE erstell > $timestamp";
$ergebnis = mysql_query($abfrage);
$num = mysql_num_rows($ergebnis);
If ($num > 0)
    {
    $i = 0;
    }

sleep(2);
}
while ($i > 0);

echo("ja");
?>

Und obwohl nun in den ifs nichts anderes passiert außer das die Variable gesetzt wird reagiert das Ajax nicht bei einem, Request bei der in der If mit dem Delete die Schleife beendet wurde.
 
Zurück