如何将iframe中的变量发布到子iframe

时间:2018-04-06 11:12:05

标签: javascript php iframe

我是Javascript的新手,并尝试如何从iframe获取变量到子iframe(本地)。第一个iframe(iframesrc.php)可以显示来自父(index.php)的变量,但第二个iframe(iframesrc2.php)不能。我需要第二个iframe来显示第一个变量,而不会在单击按钮时丢失所有变量"插入票证"。请帮助..提前致谢。抱歉我的英语..

以下是我的代码(index.php,iframesrc.php,iframesrc2.php):

的index.php

index.php包含一个ajax脚本(在标题中),用于将变量发布到iframe。它可以在目标页面上成功显示变量(iframesrc.php)

<!doctype html>
<html>
    <head>
        <title>Post to an iFrame using Ajax</title>
        <script type='text/javascript' charset='utf-8'>

            function ajax(m,u,p,c){
                /*
                    m=method
                    u=url
                    p=params {name:value}
                    c=callback
                */
                var xhr=new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if( xhr.readyState==4 && xhr.status==200 )c.call(this,xhr.response);
                };

                var params=[];
                for( var n in p )params.push(n+'='+p[n]);

                switch( m.toLowerCase() ){
                    case 'post': p=params.join('&'); break;
                    case 'get': u+='?'+params.join('&'); p=null; break; 
                }

                xhr.open( m.toUpperCase(), u, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.send( p );
            }


            function initialise(){
                var bttn=document.querySelectorAll('input[type="button"]')[0];
                    bttn.onclick=function(event){
                        var params={};
                        var fd=new FormData( document.forms['myform'] );
                        for( var key of fd.keys() ) params[key]=fd.get(key);
                        ajax.call( this, 'post', document.querySelectorAll('iframe[name="ifr"]')[0].src, params, cbfd );
                    };
            }

            function cbfd(r){
                var iframe=document.querySelectorAll('iframe[name="ifr"]')[0].contentWindow.document;
                iframe.body.innerHTML=r;
            }


            document.addEventListener('DOMContentLoaded',initialise,false);
        </script>
    </head>
    <body>
        <form name="myform" method="post">
            <input name="tid" value="<?php if(isset($_REQUEST['tid'])) { echo htmlentities($_REQUEST['tid']); }?>" type="text" placeholder="VAL1" />
            <input type="button" value="Generate" />
        </form>
        <iframe name="ifr" src="iframesrc.php"></iframe>
    </body>
</html>

iframesrc.php

iframesrc.php包含通过回显存储变量(值1 )的脚本:

<?php
echo $_POST['tid'];
?>

它有效。还在标题处包含一个ajax脚本,以便在下一个目标页面/ iframesrc2.php(无法正常工作)中显示值2 。请帮帮我:(

<!doctype html>
<html>
    <head>
        <title>iframesrc.php</title>
        <script type='text/javascript' charset='utf-8'>

            function ajax(m,u,p,c){
                /*
                    m=method
                    u=url
                    p=params {name:value}
                    c=callback
                */
                var xhr=new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if( xhr.readyState==4 && xhr.status==200 )c.call(this,xhr.response);
                };

                var params=[];
                for( var n in p )params.push(n+'='+p[n]);

                switch( m.toLowerCase() ){
                    case 'post': p=params.join('&'); break;
                    case 'get': u+='?'+params.join('&'); p=null; break; 
                }

                xhr.open( m.toUpperCase(), u, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.send( p );
            }


            function initialise(){
                var bttn=document.querySelectorAll('input[type="button"]')[0];
                    bttn.onclick=function(event){
                        var params={};
                        var fd=new FormData( document.forms['myform'] );
                        for( var key of fd.keys() ) params[key]=fd.get(key);
                        ajax.call( this, 'post', document.querySelectorAll('iframe[name="ifr"]')[0].src, params, cbfd );
                    };
            }

            function cbfd(r){
                var iframe=document.querySelectorAll('iframe[name="ifr"]')[0].contentWindow.document;
                iframe.body.innerHTML=r;
            }


            document.addEventListener('DOMContentLoaded',initialise,false);
        </script>
    </head>
<body>
<?php
echo $_POST['tid'];
?>
<form name="myform" method="post">
    <input name="notikjarkom" value="<?php if (isset($notikjarkom)) { echo htmlentities($notikjarkom); }?>" type="text" placeholder="VAL2" />
    <input type="button" value="Insert Ticket" />
</form>
    <iframe name="ifr" src="iframesrc2.php"></iframe>
</body>
</html>

iframesrc2.php

iframesrc2.php是第二个iframe(我想让它显示iframesrc.php请求的变量的子iframe

<!doctype html>
<html>
    <head>
        <title>iframesrc2.php</title>
    </head>
    <body>
<?php
echo $_POST['notikjarkom'];
?>
    </body>
</html>

以下是截图: image

当我填充一个值(值1)并单击Generate时,值1成功显示在iframesrc.php中,但是当我填充一个值(值2)并单击Insert Ticket时,值2未显示在第二个iframe(iframesrc2.php)请帮助我......

1 个答案:

答案 0 :(得分:0)

通过更改不使用Javascript的第二个iframe解决了这个问题。 我刚刚用以下内容替换了表单和iframe部分:

<form action="iframesrc2.php" target="ifr2" method="post">
    <input name="notikjarkom" value="<?php if (isset($notikjarkom)) { echo htmlentities($notikjarkom); }?>" type="text" placeholder="PASTE NOTIK JARKOM DISINI DAN TEKAN INSERT TICKET" />
    <input type="submit" value="Insert Ticket" />
</form>
    <iframe name="ifr2"></iframe>

谢谢,是的,我需要了解更多关于一切的内容:)