• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

onload-befehl ein 2.mal ausführen

Status
Für weitere Antworten geschlossen.
ok, hier mal ein beispiel.

Es werden 2 Alerts ausgegeben
  1. xmlhttpRequest wird abgesetzt
  2. Request beendet, wieder freigegeben
zwischen diesen Meldungen wird ein wenig zeit vergehen. In dieser Zeit ist (hier "testx") das xmlHttpRequest object blockiert. wenn du gleichzeitig einen anderen Request über testx absetzt, wird ein fehlere auftreten. Das kann man aber umgehen in dem man eine andere instanz von xmlhttprequest benutzt. Am besten für jeden aufruf immer eine neue instanz nehmen.

In diesem Code habe ich eine nützliche neuerung für dich, die du vlt übernehmen solltest ;) - es hier nämlich eine funktion die einer beliebiegen variablen eine xmlHtppRequest instanz zuweist, du brauchst als nicht für jede Instanz den kompletten Code zum erzeugen neu schreiben, sonden nur die Funktion aufrufen:
Code:
var = ajax(var)
PHP:
<?php /* Warum gibt es immer noch den HTML-Code-Bug?? :( */ ?>
<html>
<head>
<title>Test JS blockieren</title>
<script type="text/javascript"><!--
function ajax(obj)
{
  obj = false
  //XMLHttpRequest-Instanz erstellen
  //... für Internet Explorer
  try
  {
    obj  = new ActiveXObject("Msxml2.XMLHTTP")
  }
  catch(e)
  {
    try
    {
      obj  = new ActiveXObject("Microsoft.XMLHTTP")
    }
    catch(e)
    {
     obj = false
    }
  }
  //... für Mozilla, Opera, Safari usw.
  if (!obj  && typeof XMLHttpRequest != 'undefined')
  {
    obj = new XMLHttpRequest()
  }
  return obj
}
var testx
function test1()
{
  if((testx = ajax(testx)))
  {
    if(testx.readystate == 0)
    {
      alert('xmlhttpRequest wird abgesetzt')
      testx.open('GET', 'http://www.html.de', true);
      testx.onreadystatechange = test1_b;
      testx.send(null);
    }
    else
    {
      alert("xmlhttpRequest wurde blockiert - nicht möglich")
    }
  }
}
function test1_b()
{
  if(testx.readystate == 4)
  {
    alert('Request beendet, wieder freigegeben');
  }
}
--></script>
</head>
<body onload="test1();">
<h1>test</h1>
</body>
</html>
 
bedeutet
Code:
      testx.onreadystatechange = test1_b;
,dass nun die function test1_b(); aufgerufen wird?

du hast nach meinem Nachdenken folgendes gemacht...
du prüfst, ob die Instanz schon vergeben ist und wenn ja, dann wird einfach die andere Funktion aufgerufen, wobei soviel zeit vergeht, dass die Instanz wieder frei ist und da hast du nochmal eine abfrage gemacht, ob es klappt und hast eine alertmeldung ausgegeben.

PS: Die Funktion ajax(); habe ich übernommen... danke^^
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben