function wird nur einmal ausgeführt

Hookah

Erfahrenes Mitglied
Hallo,

Ich hab da ein Problem und zwar dreht es sich um folgendes.

Ich hab einen Bildupload gemacht. Wenn man ein Bild einfügen möchte öffnet sich ein PopUp wo man dann das Bild hochladen kann. Hab ich ein Bild hochgeladen wird das PopUp geschlossen und dabei wird dann eine function auf der Seite ausgeführt von der ich das PopUp hab öffnen lassen, das sieht so aus:
Code:
<script language="JavaScript">

doit();

function doit(){

opener.vorschau();


opener.focus();
self.close();
}
</script>

Ruf ich vorschau auf wird folgendes ausgeführt:

Code:
<script>
vorschau();

function vorschau()
{
 if (xmlHttp) {
     xmlHttp.open(\'GET\', \'vorschau.php?id='.$id.'\', true);
     xmlHttp.onreadystatechange = function () {
         if (xmlHttp.readyState == 4) {
             document.getElementById("bilder").innerHTML = xmlHttp.responseText;
         }
     };
     xmlHttp.send(null);
 }

}
</script>

(hab natürlich noch das mit dem XMLHttpRequest dingen davor gemacht )

Ich will das das Upgeloadete Bild direkt angezeigt wird , vorschau.php bearbeitet nur die in einer Tabelle eingetragenen Bildnamen , gehört aber nicht hier hin und denke mal hat mit dem Problem nichts zu tun.

vorschau(); wird auch einmal beim Aufrufen der Seite ausgeführt!

Das funktioniert soweit auch aber nur einmal! Lad ich noch ein Bild hoch bleibt das Fenster geöffnet und die Bildvorschau ändert sich nicht mehr.

Was mach ich falsch bzw gibt es vielleicht noch eine Lösung?

mfG Hookah
 
Hi,

vielleicht hilft es, wenn du der URL einen Timestamp mitgibst.
Code:
xmlHttp.open(\'GET\', \'vorschau.php?id='.$id.'&\'+new Date().getTime(), true);
Ciao
Quaese
 
Hast du schon mal mit einem "alert("test");" in der function mal probiert ob er überhaupt nochmal in die function reingeht oder ob nur das fenster nicht nochmal geöffnet wird?
 
Fenster? Meinst du das PopUp?

Das öffnet sich immer nur schließt es sich nach dem zweitenmal nicht mehr und die vorschau wird auch nicht automatisch aktualisiert, wie gesagt nur beim erstenmal gehts oder eben wenn man die ganze Seite neu lädt. Oder was meinst du genau?
 
Hi,

ich hab hier versucht, das Problem zu simulieren, kann aber das Phänomen nicht nachvollziehen.

opener ist das Ausgangsdokument. Hier wird das Request-Objekt erstellt. Als ID sende ich
eine Zufallszahl.

opener:
Code:
<html>
<head>
<title>www.tutorials.de - opener</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<!--
var xmlHttp = false;

function instanceRequest(){
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    xmlHttp = new XMLHttpRequest();
  } else if (window.ActiveXObject) { // IE
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }

  if (!xmlHttp) {
    alert(' Kann keine XMLHTTP-Instanz erzeugen');
    return false;
  }
}

function vorschau() {
  // Falls noch ein Request-Objekt existiert -> zunächst beenden
  if(xmlHttp && xmlHttp.readyState){
    xmlHttp.abort( );
    xmlHttp = false;
  }

  if(!xmlHttp){
    instanceRequest();
  }

  xmlHttp.open('GET', 'xmlhttp_request_dummy.php?id='+Math.round(Math.random()*1000)%4, true);

  xmlHttp.onreadystatechange = function () {
    if(xmlHttp.readyState == 4){
      document.getElementById("bilder").innerHTML = unescape(xmlHttp.responseText);
    }
  };

  xmlHttp.send(null);
}

window.onload = function(){
  vorschau();
}
//-->
</script>
</head>
<body>
<button onclick="window.open('popup.html');">PopUp()</button>
<div id="bilder"></div>
</body>
</html>
Das popup.html führt auf Knopfdruck die Funktion vorschau aus und schliesst sich zeitverzögert.

popup.html:
Code:
<html>
<head>
<title>www.tutorials.de - popup</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function doit(){
  opener.vorschau();
  opener.focus();
  window.setTimeout("self.close()", 100);
}
 //-->
</script>
</head>
<body>
<button onclick="doit();">doit()</button>
</body>
</html>
Zu guter Letzt noch die vorschau.php, die lediglich einen String mit HTML-Code zurück liefert.

vorschau.php:
Code:
<?php
  $arrImg = array("bild1.gif", "bild2.gif", "bild3.gif", "bild4.gif");
  echo(rawurlencode("<img src=".$arrImg[$_GET['id']]."><div>".$arrImg[$_GET['id']]."</div>"));
?>
Vielleicht hilft dir das bei der Fehleranalyse weiter.

Ciao
Quaese
 

Neue Beiträge

Zurück