如何使用Jquery将数据发布到iframe

 万万558 发布于 2023-02-13 11:01

如何在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进行此操作?

2 个回答
  • 这个函数创建一个临时表单,然后使用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'}
    

    2023-02-13 11:03 回答
  • 好吧,因为这显然不存在,我创建了自己的解决方案.在这里分享它,以防任何人想要在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.

    2023-02-13 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有