Ok, da dies anscheinend nicht existiert, habe ich meine eigene Lösung erstellt. Teilen Sie es hier, falls jemand einen Iframe in JQuery posten möchte.
Die JS-Funktion/ klassenähnlich:
function iframeform(url)
{
var object = this;
object.time = new Date().getTime();
object.form = $('<form action="'+url+'" target="iframe'+object.time+'" method="post" style="display:none;" id="form'+object.time+'" name="form'+object.time+'"></form>');
object.addParameter = function(parameter,value)
{
$("<input type='hidden' />")
.attr("name", parameter)
.attr("value", value)
.appendTo(object.form);
}
object.send = function()
{
var iframe = $('<iframe data-time="'+object.time+'" style="display:none;" id="iframe'+object.time+'"></iframe>');
$( "body" ).append(iframe);
$( "body" ).append(object.form);
object.form.submit();
iframe.load(function(){ $('#form'+$(this).data('time')).remove(); $(this).remove(); });
}
}
Wenn Sie dann ein Formular an einen vorübergehenden Iframe senden müssen:
var dummy = new iframeform('server.php');
dummy.addParameter('type','test');
dummy.addParameter('message','Works...');
dummy.send();
Dies ist die Beispieldatei von Server.php:
if($_POST[type] == 'test')
{
header( 'Content-type: text/html; charset=utf-8' );
echo '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>';
echo str_pad('',4096); //fill browser buffer
for($i = 0; $i < 10; $i++)
{
echo '<script type="text/javascript">window.parent.console.log(\''.$_POST[message].'\');</script>';
ob_flush(); flush();
usleep(350000);
}
}
Und das Ergebnis ist wie erwartet:
Die Konsole des Hauptrahmens gibt die Zeichenfolge 'funktioniert ...' alle 350 ms sofort beginnen, auch wenn der PHP noch ausgeführt wird.
Wenn der PHP fertig ist, um die Stücke zu senden, entfernt es einfach das temporäre Formular und das temporäre Iframe.