如何在Jquery中动态地将数据发布到iframe。
在这种情况下我真的需要将数据发布到Iframe,我不能使用$ .POST,因为收到的数据是按顺序返回的(缓冲的)
如果你有一个解决方法,可以在收到数据时让$ .POST'返回jquery处理数据。我很好奇!
目前我用GETS处理它:
var iframe = $('<iframe style="display:none;"></iframe>');
$( "body" ).append(iframe);
iframe.attr('src','server.php?type=getFolders&inode='+nodeData.inode).load(function(){$(this).remove()});
这基本上创建了一个临时的iframe,让php在返回数据的同时在其中注入javascript(使用ob_flush();flush();
),然后当它完成时,它只是移除iframe来清理。
,我使用window.parent.
访问主框架,然后访问大型机的方法。
这是理想的,但与GET一起使用,如何使用POST进行此操作?
答案 0 :(得分:28)
此函数创建一个临时表单,然后使用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'}
答案 1 :(得分:15)
好的,因为这显然不存在,我创建了自己的解决方案。如果有人想在jQuery中发布到iFrame,请在此处分享。
js function / class-like:
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(); });
}
}
然后当您需要将表单发送到临时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仍在运行。
当php完成发送块时,它只是删除临时表单和临时iframe。
答案 2 :(得分:2)
您可以使用目标方法或使用AJAX进行上述工作
<form action="..." target="an_iframe" type="post">
<input type="text" name="cmd" placeholder="type a command here..." />
<input type="submit" value="Run!" />
</form>
<iframe id="an_iframe"></iframe>