如何在Jquery中动态地将数据发布到iframe.
在这种情况下我真的需要将数据发布到Iframe,我不能使用$ .POST,因为接收的数据是按顺序返回的(缓冲的)
如果你有一个解决方法,当它收到数据时,让jquery处理由$ .POST'返回的数据.我很好奇!
目前我用GETS这样处理它:
var iframe = $(''); $( "body" ).append(iframe); iframe.attr('src','server.php?type=getFolders&inode='+nodeData.inode).load(function(){$(this).remove()});
这基本上创建了一个临时的iframe,并让php在ob_flush();flush();
返回数据时注入javascript(使用),然后当它完成时,它只是删除iframe来清理.
从iframe中,我用window.parent.
主机的方法访问主框架.
这是理想的,但与GET一起使用,如何使用POST进行此操作?
这个函数创建一个临时表单,然后使用jQuery发送数据:
function postToIframe(data,url,target){ $('body').append('<form action="'+url+'" method="post" target="'+target+'" id="postToIframe"></form>'); $.each(data,function(n,v){ $('#postToIframe').append('<input type="hidden" name="'+n+'" value="'+v+'" />'); }); $('#postToIframe').submit().remove(); }
target是目标iFrame的'name'attr,data是JS对象:
data={last_name:'Smith',first_name:'John'}
好吧,因为这显然不存在,我创建了自己的解决方案.在这里分享它,以防任何人想要在jQuery中发布到iFrame.
js函数/类似:
function iframeform(url) { var object = this; object.time = new Date().getTime(); object.form = $('<form action="'+url+'" target="iframe'+object.time+'" method="post" 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+'" 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(); }); } }
然后当您需要将表单发送到临时iframe时:
var dummy = new iframeform('server.php'); dummy.addParameter('type','test'); dummy.addParameter('message','Works...'); dummy.send();
这是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); } }
结果如预期:
即使php仍在运行,主框架的控制台每隔350ms立即输出字符串'Works ...'.
当php完成发送块时,它只是删除临时表单和临时iframe.