Well, since this does not seem to exist, I created my own solution. Divide it here if someone wants a POST for iFrame in jQuery.
Js / class-like function:
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(); }); } }
then when you need to submit the form in a temporary iframe:
var dummy = new iframeform('server.php'); dummy.addParameter('type','test'); dummy.addParameter('message','Works...'); dummy.send();
This is an example server.php file:
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); } }
And the result will be as expected:
the main frame console prints the line "Works ..." every 350 ms, starting immediately, even if php is still running.
When php finishes sending pieces, it just removes the temporary form and temporary iframe.
Vincent duprez
source share