ajax加载数据到页面无法打印的解决办法

        今天,弄一个打印页面的功能大致的原理想法是,ajax加载页面到当前的一个隐藏iframe里面,然后打印iframe,为了兼容所有的浏览器,只好舍弃预览功能,使用print()方法打印。可是试了好几遍,每次打印都是空白啊。具体的代码如下

function XmlPostprint(){
	var result='';
	$.ajax({
		url:"test222.html",
		success:function(data){
			var doc=$("iframe#flyso")[0].contentWindow.document;
			doc.write(data);
			doc.close();

		}
	});
}

function prints()
{
	XmlPostprint();
		var ss=document.getElementById("flyso");
		ss.contentWindow.close();
		ss.contentWindow.focus();
		ss.contentWindow.print();


}

        之后无意中一次点击了两次打印按钮,突然发现竟然又可以打印了。才恍然大悟,jquery的ajax默认是异步加载的,也就是说prints()方法中的XmlPostprint()方法尚未完成,就直接执行下面的js语句了。解决方法就是jquery的ajax添加上async:false的属性,修改后的XmlPostprint()如下:

function XmlPostprint(){
	var result='';
	$.ajax({
		url:"test222.html",
		async:false,
		success:function(data){
			var doc=$("iframe#flyso")[0].contentWindow.document;
			doc.write(data);
			doc.close();

		}
	});
}

注:contentWindow是用于获取iframe框架的window对象。本想用contentDocument,但此属性兼容性不好。再者,非常感谢jquery插件printArea的作者,许多想法都看了插件的源代码才实现,万分感谢

转载于:https://my.oschina.net/ivanfjz/blog/80019

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值