jojobla: Nach JS-File-Submit @ iframe, auf iframes neue Daten zugreifen

Hallo.

Ich habe ein Formular mit dem man ein Bild hochladen kann.
Dieses wird von mir verarbeitet und anschließend werden Daten zurückgegeben.
Danach möchte ich auf diese Daten im iframe zugreifen!
Das klappt erst, nachdem ich das Formular ein zweites mal abgesendet habe.
Warum?

Code:

function uploadPic(){  
	var x=null;  
	var d=document.getElementById('imgwrap');  
	var t=document.getElementById('testImage');  
	d.style.display='block';  
	d.style.width=t.style.width=parent.iframe_pic.document.getElementById('imageWidth').innerHTML+'px';  
	d.style.height=t.style.height=parent.iframe_pic.document.getElementById('imageHeight').innerHTML+'px';  
	t.src=parent.iframe_pic.document.getElementById('theImage').innerHTML;  
	document.getElementById('saveimg').style.display='block';  
	document.getElementById('pp').style.display='none';  
	new Cropper.ImgWithPreview( 'testImage' , {previewWrap: 'previewWrap', minWidth: 218, minHeight: 166, maxHeight:166, maxWidth:218, ratioDim: { x: 218, y: 166}, onEndCrop: onEndCrop } );  
	return true;  
}
  
<iframe src="/Helpers/blank.php" id="testImageIframe" name="iframe_pic" style="display:none"></iframe>  
		<div id="imgwrap"><img src="#" id="testImage"></div>  
		<div id="saveimg"></div>  
  
<form action='./Profil_Pics/uploadPic/isajax' target='iframe_pic' method='post' enctype='multipart/form-data' onsubmit='return uploadPic();'>  
  
<input type='hidden' name='MAX_FILE_SIZE' value='10485760' />  
<p><input type='file' name='newpic' /></p>  
<button type="submit">Absenden</button>  

Die "/Helpers/blank.php" ist ein leeres Dokument.

Das Ergebnise von "./Profil_Pics/uploadPic/isajax" sieht so aus:

  
<html><head></head><body>  
<div id="theImage">bildpfad.jpg</div>  
<div id="imageHeight">400'</div>  
<div id="imageWidth">300</div>  
</body></html>

Komisch ist vor allem das ich das Ding zwei Male absenden muss. Beim zweiten mal wird uploadPic() zuende ausgeführt.
Beim ersten mal sagt mir die Fehlerkonsole parent.iframe_pic.document.getElementById('imageWidth')=null

Also scheinen beim ersten mal die Daten noch nicht da zu sein. Was kann ich dagegen tun? Warum klappt es denn beim zweiten mal?
Gibt es keine Möglichkeit den submit zu überprüfen und erst DANACH darauf zuzugreifen? Dann müsste es doch klappen...

Lg, jojobla

  1. Hi,

    Das klappt erst, nachdem ich das Formular ein zweites mal abgesendet habe.

    nein, _bevor_ Du es ein zweites Mal absendest.

    Warum?

    Weil Du es _vor_ dem ersten Mal versuchst, onsubmit nämlich. Der Submit muss erst geschehen können, und die Rückgabe des Servers muss eine Chance haben, beim Client anzukommen. Dass dauert eine ziemlich lange Zeit, und Du hast nur eine negative Spanne Geduld.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Weil Du es _vor_ dem ersten Mal versuchst, onsubmit nämlich. Der Submit muss erst geschehen können, und die Rückgabe des Servers muss eine Chance haben, beim Client anzukommen. Dass dauert eine ziemlich lange Zeit, und Du hast nur eine negative Spanne Geduld.

      Okay gut. Das dachte ich mir auch!
      Habe dann versucht das irgendwie nach dem Submit auszuführen.
      Mein Versuch war dann:

      <button blabla onclick="javascript:sende submit;uploadpic();">..

      aber das hat auch nicht funktioniert. Habe auch danach gegoogled wie ich etwas nach einem erfolgreichen Submit ausführe. Ich habe nichts brauchbares gefunden. Kannst du mir da 1,2,3 Stichwörter geben?

      Lg, jojoblabla

      1. Hi,

        Habe auch danach gegoogled wie ich etwas nach einem erfolgreichen Submit ausführe.

        In dem du den JavaScript-Code, der „nach dem Submit“ ausgeführt werden soll, *in* das Dokument mit einbaust, welches dein Server als *Antwort* auf die Formular-Anfrage zurückschickt (also wohl die Ausgabe deines PHP-Scriptes). Und zwar so, dass er entweder direkt, oder beim Fertigladen (load-Event) *dieses* Dokumentes ausgeführt wird.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Hi.

          In dem du den JavaScript-Code, der „nach dem Submit“ ausgeführt werden soll, *in* das Dokument mit einbaust, welches dein Server als *Antwort* auf die Formular-Anfrage zurückschickt (also wohl die Ausgabe deines PHP-Scriptes). Und zwar so, dass er entweder direkt, oder beim Fertigladen (load-Event) *dieses* Dokumentes ausgeführt wird.

          Top - danke.

      2. Hi,

        Habe dann versucht das irgendwie nach dem Submit auszuführen.
        Mein Versuch war dann:
        <button blabla onclick="javascript:sende submit;uploadpic();">..

        das wird sogar noch vor dem onsubit ausgeführt. Nebenbei: Was für ein JavaScript-Code ist Deiner Meinung nach "javascript:"?

        aber das hat auch nicht funktioniert. Habe auch danach gegoogled wie ich etwas nach einem erfolgreichen Submit ausführe.

        Oh, da würde wohl ein simpler Timeout reichen. Allerdings weißt Du damit noch immer nicht, wann Du ein Deinen Ansprüchen genügend fertiges Dokument in einem fremden Fenster vorliegen hast. Hierzu siehe Chris' Antwort.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          <button blabla onclick="javascript:sende submit;uploadpic();">..

          Nebenbei: Was für ein JavaScript-Code ist Deiner Meinung nach "javascript:"?

          Was für einen Ausdruck
           sende submit;
          darstellt, bzw. welcher Syntax der folgen soll, würde mich noch mehr interessieren.

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]