Ajax: Abfrage findet statt, aber aktualisiert innerHTML nicht

tobee

Erfahrenes Mitglied
Hallo,

ich habe hier mein erstes Ajax Skript geschrieben:
Code:
<script type="text/javascript">
var http_request = false;

function request()
{
  
  http_request = false;
  
  if (window.XMLHttpRequest)	{
	  
		http_request = new XMLHttpRequest();
	  if(http_request.overrideMimeType)	{
		  http_request.overrideMimeType('text/xml');
		}  
	  
	}
	else if (window.ActiveXObject)	{
	  try {
		  http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e)	{
		  try {
			  http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {}
		}
	}
	
	if(!http_request)	{
	  alert('Ende: (Kann keine XMLHTTP-Instanz erzeugen)');
	}
	
	http_request.onreadystatechange = test;
	http_request.open('GET', 'cronjob.php', true);
	http_request.send(null);
	
	setTimeout("request()", 1000);
}

/*
http_request.readyState
http_request.status
*/

function test()
{
  if(http_request.readyState == 4)	{
	  if(http_request.status == 200)	{
		  document.getElementById('out').innerHTML = http_request.responseText;
		}
		else	{
		  alert('Fehler beim Request');
		}
	}
}
</script>
	
</head>
<body onLoad="request()" style="margin:0px;">

<div id="out"></div>

</body>
</html>

Wenn ich aber jetzt das Skript starte wird mein Text einmal aktualisiert. Danach aber nicht mehr.

In der Datei cronjob.php mache ein SQL Select und gebe es gleich mit Echo aus.
Ist das so falsch?

Tobee
 
Hi.

Ich denke mal es ist etwas ungünstig das du den Timeout gleich setzt nachdem du den Request abgesendet hast.

Du weißt doch gar nicht wie lange die Anfrage dauern wird und evtl. wird die request() Funktion bereits wieder aufgerufen bevor die Anfrage vollständig abgearbeitet wurde (was dazu führt das die Variable http_request auf false gesetzt wird und somit nicht mehr in der test Funktion verfügbar ist).

Setz mal einfach den Timeout in der test() Funktion wenn die Anfrage den readyState 4 hat.

Gruß
 
Ich habe jetzt das setTimeout in der Funktion test() nach der Zeile:
Code:
document.getElementById('out').innerHTML = http_request.responseText;
eingefügt. Es funktioniert aber leider auch nicht.
Nich mal eine JavaScript Fehlermeldung

Tobee
 
Machs mal so:
Code:
http_request.open('GET', 'cronjob.php?'+new Date().getTime(), true);

damit hängst du an die URL des anzufordernden Skriptes den aktuellen Timestamp, die Browser laden die Sache andernfalls aus dem Cache, wodurch die Änderungen nicht übernommen werden.
 
Ah ja. Dann tritt das Problem aber nur beim IE auf, oder? Firefox und Co. sollten die Daten eigentlich niemals aus dem Cache laden...

Gruß
 
Sven Mintel hat gesagt.:
Machs mal so:
Code:
http_request.open('GET', 'cronjob.php?'+new Date().getTime(), true);

damit hängst du an die URL des anzufordernden Skriptes den aktuellen Timestamp, die Browser laden die Sache andernfalls aus dem Cache, wodurch die Änderungen nicht übernommen werden.

Wie meinst du das?
Wie soll ich dann den timestamp verarbeiten?
Das hab ich leider noch nicht verstanden :(

Tobee
 
Hi.

Den Timestamp verarbeitest du überhaupt nicht. Der ist nur für den Browser gut, damit der nicht in den Cache guckt.

Trat denn nun das Problem eigentlich auch im Firefox auf, oder nicht?

Gruß
 
Danke ich werde es heute abend mal im IE nochmal probieren.
Aber im Firefox gab es eigentlich keine Probleme.

btw. Wie viel Abfragen kann man denn dem Internetuser zumuten? :p

Tobee
 
Zurück