你如何发布到iframe?

Mur*_*dvi 257 iframe post

如何将数据发布到iframe?

Dyl*_*tie 397

取决于"发布数据"的含义.您可以target=""<form />标记上使用HTML 属性,因此它可以像下面这样简单:

<form action="do_stuff.aspx" method="post" target="my_iframe">
  <input type="submit" value="Do Stuff!" />
</form>

<!-- when the form is submitted, the server response will appear in this iframe -->
<iframe name="my_iframe" src="not_submitted_yet.aspx"></iframe>
Run Code Online (Sandbox Code Playgroud)

如果不是这样,或者您正在处理更复杂的事情,请编辑您的问题以包含更多详细信息.

Internet Explorer存在一个已知的错误,只有当您使用Javascript动态创建iframe等时才会出现(这里有一个解决方法),但如果您使用普通的HTML标记,那么就没问题了.目标属性和框架名称不是一些聪明的忍者黑客; 虽然它在HTML 4 Strict或XHTML 1 Strict中被弃用(因此不会验证),但它自3.2起就成为HTML的一部分,它正式成为HTML5的一部分,并且它自Netscape 3起几乎适用于所有浏览器.

我已经验证了这种行为与使用XHTML 1 Strict,XHTML 1 Transitional,HTML 4 Strict以及没有指定DOCTYPE的"quirks模式"一起使用,并且它适用于所有使用Internet Explorer 7.0.5730.13的情况.我的测试用例包含两个文件,在IIS 6上使用经典ASP; 它们在这里完整复制,因此您可以自己验证这种行为.

Default.asp的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Form Iframe Demo</title>
  </head>
  <body>
  <form action="do_stuff.asp" method="post" target="my_frame">
    <input type="text" name="someText" value="Some Text" />
    <input type="submit" />
  </form>
  <iframe name="my_frame" src="do_stuff.asp">
  </iframe>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

do_stuff.asp

<%@Language="JScript"%><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Form Iframe Demo</title>
  </head>
  <body>
  <% if (Request.Form.Count) { %>
  You typed: <%=Request.Form("someText").Item%>
  <% } else { %>
  (not submitted)
  <% } %>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我很想知道任何浏览器没有正确运行这些示例.

  • IE 7的问题在于,如果使用javascript生成iframe,则不设置name标记(即使您尝试设置它),为什么post目标将失败.IE7的解决方案:http://stackoverflow.com/questions/2181385/ie-issue-submitting-form-to-an-iframe-using-javascript (12认同)
  • 这可以用不同的网站完成吗?(CORS)? (3认同)

小智 24

iframe用于在html页面中嵌入另一个文档.

如果要将表单提交到表单页面中的iframe,则可以使用标记的target属性轻松实现该表单.

将表单的target属性设置为iframe标记的名称.

<form action="action" method="post" target="output_frame">
    <!-- input elements here --> 
</form>
<iframe name="output_frame" src="" id="output_frame" width="XX" height="YY">
</iframe>           
Run Code Online (Sandbox Code Playgroud)

高级iframe目标使用
此属性也可用于产生类似ajax的体验,特别是在文件上传等情况下,在这种情况下必须提交表单,以便上传文件

iframe可以设置为0的宽度和高度,并且可以在将目标设置为iframe的情况下提交表单,并在提交表单之前打开加载对话框.因此,它控制ajax控件,因为控件仍然保留在输入表单jsp上,并打开加载对话框.

〔实施例

<script>
$( "#uploadDialog" ).dialog({ autoOpen: false, modal: true, closeOnEscape: false,                 
            open: function(event, ui) { jQuery('.ui-dialog-titlebar-close').hide(); } });

function startUpload()
{            
    $("#uploadDialog").dialog("open");
}

function stopUpload()
{            
    $("#uploadDialog").dialog("close");
}
</script>

<div id="uploadDialog" title="Please Wait!!!">
            <center>
            <img src="/imagePath/loading.gif" width="100" height="100"/>
            <br/>
            Loading Details...
            </center>
 </div>

<FORM  ENCTYPE="multipart/form-data" ACTION="Action" METHOD="POST" target="upload_target" onsubmit="startUpload()"> 
<!-- input file elements here--> 
</FORM>

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;" onload="stopUpload()">   
        </iframe>
Run Code Online (Sandbox Code Playgroud)


Dr *_*red 5

此函数创建一个临时表单,然后使用 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();
}
Run Code Online (Sandbox Code Playgroud)

target 是目标 iFrame 的“name”属性,data 是一个 JS 对象:

data={last_name:'Smith',first_name:'John'}
Run Code Online (Sandbox Code Playgroud)