首页 新闻 赞助 找找看

问各位大神一个简单的问题,怎么动态给iframe插入HTML元素?

0
悬赏园豆:5 [已解决问题] 解决于 2017-12-25 16:42

目标是把table转换成Excel,

思路是把页面的表格用html()获取,用ajax传给后台处理成一个HTML文件再传回来,

插入到动态生成的iframe框架中,下载下来,

代码:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="application/ms-excel; charset=gb2312">
<!--[if gte mso 9]>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>sheetName</x:Name>
<x:WorksheetOptions>
<x:Print>
<x:ValidPrinterInfo ></x:ValidPrinterInfo>
</x:Print>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
后台处理后返回的HTML格式数据:
</x:ExcelWorkbook>
</xml>
<![endif]-->
</head>
<body>
<table>
<tbody>
<tr><th>交易日期</th><th>总订单数</th><th>交易总额</th><th>完成订单数</th><th>完成总额</th><th>撤单总订单数</th><th>撤单总额</th></tr>
<tr><td>2017-12-05</td><td>7414</td><td>1483.6</td><td>7414</td><td>1483.6</td><td>0</td><td>0</td></tr>
<tr><td>2017-12-04</td><td>5649</td><td>770.9</td><td>5649</td><td>770.9</td><td>0</td><td>0</td></tr>
<tr><th>合计行</th><th>总计13063单</th><th>总计2254.50元</th><th>总计13063单</th><th>总计2254.50元</th><th>总计0单</th><th>总计0.00元</th></tr>
</tbody>
</table>
</body>
</html>

ajax代码:

            $.ajax({
                type: 'post',
                url: 'ajax_aspx.aspx?' + param,
                contentType: "application/json",
                data: { 'TD': tabledata },
                async: false,
                success: function (msg) {
1, var _frame = $('
<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame"></iframe>'); _frame.write(msg); _frame.appendTo('body'); //alert(msg); }, error: function () { alert("可以个屁"); } });

上面的插入方式不行,直接走不通,下面2种走通了,但是没下载(谷歌浏览器),

2,
var _frame = $('<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame">' + msg + '</iframe>'); _frame.appendTo('body');
3, var _frame = $('
<iframe id="Export-modal-content" scrolling="no" border="0" frameborder="0" name="Export-frame" srcdoc=' + msg +'></iframe>'); _frame.appendTo('body');

第一种是百度找的,貌似要在HTML上预先有iframe才行,

2和3是w3school里找到的灵感。

****************

直接把iframe的src设置成ajax的路径,用参数获取数据拼接成table就能下,

                    var _frame = $('<iframe id="Export-modal-content" src="/ajax_aspx.aspx?' + param + '"  scrolling="no" border="0" frameborder="0" name="Export-frame" />');
                    _frame.appendTo('body');

咋办,就差这最后一步了,求大神帮帮忙,谢谢。

Anmen的主页 Anmen | 初学一级 | 园豆:70
提问于:2017-12-25 16:00
< >
分享
最佳答案
0

你到底要干什么?

使用JS可以访问和控制IFRAME里几乎所有东西

收获园豆:5
西漠以西 | 小虾三级 |园豆:1675 | 2017-12-25 16:03

就是把一个HTML数据插入到iframe然后下载成Excel文件

Anmen | 园豆:70 (初学一级) | 2017-12-25 16:11

@Anmen: 

在服务器上生成EXCEL,直接下载给用户保存就行了。不需要IFRAME

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-25 16:16

@西漠以西: 

            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.Charset = "gb2312";
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + "_" + DateTime.Now.ToString("yyMMddHHmmss") + Utils.GetRandomString(4, 4, "0123456789") + ".xls");
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            HttpContext.Current.Response.Write("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=gb2312\"/>" + sHtml);
            HttpContext.Current.Response.End();

sHtml是一个用table和html元素拼接的字符串,这样直接在ajax返回一个HTML页面过来,没有下载成Excel。。。

Anmen | 园豆:70 (初学一级) | 2017-12-25 16:30

@Anmen: 你需要学习怎样使用c#、.NET、asp.net 在服务器上生成一个EXCEL文件并直接下载给用户。

你还需要学习怎样使用c#、.NET生成EXCEL文件并向它里面写入数据。

抛弃你上面的代码。

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-25 16:35

@Anmen: 在博客园里搜索 : asp.net 生成EXCEL

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-25 16:36

@西漠以西: 好的,谢谢

Anmen | 园豆:70 (初学一级) | 2017-12-25 16:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册