Ajax-Requets in Schleifen

gert

Grünschnabel
Hallo, ich hoffe, ich bin in der richtigen Rubrik gelandet.
Habe folgendes Problem:
Ich möchte in einen Script nacheinander mehrere Requests innerhalb einer Schleife an ein php-Script senden, um die Domainbeschreibungen für die jeweilige Domain zu holen. Als Beispiel ist unter ein kleines Array mit 3 Domains angegeben. Die ausgelesenen Inhalte sollen dann unten im div-Container mit der id=$id plaziert werden. Ohne Schleife für eine Domain geht diese function einwandfrei. Aber wenn ich das ganze als Schleifendurchlauf mache, passiert nix, kann auch nicht, da ja die function macheRequest(url,i) mehrmals ausgeführt werden muß.
Sicher muß auch die Variable i mit an die function alertInhalt() mit übergeben werden. Aber wenn ich die mit übergebe, dann passiert leider nix.
Wo könnte der Fehler liegen? Vielen Dank im Voraus.

Aber hier mal der Code zum Anschauen:

Code:
<script type="text/javascript" language="javascript">
var http_request = false;
function macheRequest(url,i)
{ 
 http_request = false;
 if (window.XMLHttpRequest)
 { // Mozilla, Safari,...
  http_request = new XMLHttpRequest();
 }
 else if (window.ActiveXObject)
 { // IE
 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');
  return false;
 }
 http_request.open('GET', url, true);
 http_request.onreadystatechange = alertInhalt;
 http_request.send(null);
}
function alertInhalt()
{
 if (http_request.readyState == 4)
 {
  var answer = http_request.responseText;
  if(document.getElementById(i).innerHTML != answer)
  {
   document.getElementById(i).innerHTML = answer;
  }
  else
  {
   document.getElementById(i).innerHTML = "";
  }
 }
}
</script>
<?php
$doms=array("www.siteindex.de","www.dudadur.de","www.dubai-individuell.de");
for($i=0;$i<count($doms);$i++)
{
 $domain=$doms[$i];
 echo "$domain <br>";
 ?>
 
 <script type="text/javascript" language="javascript">
  window.onload=macheRequest('descrholen.php?domain=<?php echo $domain; ?>',<?php echo $i; ?>);
 </script>
 
 <?php
 echo "<div id='$i'>läd noch...</div><br>";
}
?>
 
Zuletzt bearbeitet:
Müsste dein Array nicht so aussehen?
PHP:
$doms = array("http://www.siteindex.de", "www.dudadur.de", "www.dubai-individuell.de");
 
Müsste dein Array nicht so aussehen?

Das Array funktioniert schon, habs jetzt nochmal richtig geschrieben. Ich denke, da hat der Editor hier einige eckige Klammern mit reingehauen, die da net hingehören. Das Array war ja nicht das eigentliche Problem. Ich wollte die Funktion halt nur immer wieder aus der Schleife heraus aufrufen. Ich hoffe, mir kann jemand helfen.
 
Zuletzt bearbeitet:
Das Problem ist das du immer window.load überschreibst.
Du könntest das Javascript nach dem Div setzen allerdings ohne window.load
Code:
<script type="text/javascript" language="javascript">
  macheRequest('descrholen.php?domain=<?php echo $domain ?>',<?php echo $i ?>);
 </script>

Setzt du bewusst kein Framework wie jQuery ein? Das würde einiges start vereinfachen
 
ok, vielen Dank für deine Hilfe erstmal. Ich habe es mal probiert. der Code sieht jetzt folgendermaßen aus:

Code:
<script type="text/javascript" language="javascript">
var http_request = false;
function macheRequest(url,i)
{	
	http_request = false;
	if (window.XMLHttpRequest)
	{ // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{ // IE
	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');
		return false;
	}
	http_request.open('GET', url, true);
	http_request.onreadystatechange = alertInhalt;
	http_request.send(null);
}
function alertInhalt(i)
{
	if (http_request.readyState == 4)
	{
		var answer = http_request.responseText;
		if(document.getElementById(i).innerHTML != answer)
		{
			document.getElementById(i).innerHTML = answer;
		}
		else
		{
			//document.getElementById(i).innerHTML = "";
		}
	}
}
</script>

<?php
$doms=array("www.siteindex.de","www.dudadur.de","www.dubai-individuell.de");

for($i=0;$i<count($doms);$i++)
{
	$domain=$doms[$i];
	echo "$domain <br>";
	echo "<div id=\"$i\">läd noch...</div><br>";
	?>
	
	<script type="text/javascript" language="javascript">
  		macheRequest('descrholen.php?domain=<?php echo $domain; ?>',<?php echo $i; ?>);
 	</script>
	
	<?php
	
}
?>

Das oder ein Problem ist auch, dass ich die Variable i aus der oberen Funktion macheRequest() nicht in die untere Funktion alertInhalt() bekomme, somit kann ja auch der Inhalt nicht in den DIV-Container verfrachtet werden. Könnte da die Lösung drinstecken? Wenn ich in Zeile 30 die Funktion alertInhalt() mit alertInhalt(i) starte, funktioniert es auch nicht. Auf alle Fälle wird die obere Funktion macheRequest() 3 mal durchlaufen. Ich habe es mit einem alert(i) geprüft.
 
Zuletzt bearbeitet:
Zurück