我需要在ajax请求后下载文件。所以我将iframe添加到一个页面,该页面将一些数据发布到webmethod并获取文件。这是javascript代码,它位于按钮单击处理程序:
var iframe = $("<iframe id='PDFIframe' style='display:none'></iframe>");
var iForm = $("<form id='PDFForm' action='App/Billing.asmx/GetPDF' target='PDFIframe' method='post' target='_parent'></form>")
.html('<input type="hidden" name="HtmlContent64" value="' + htmlContent64 + '"/><input type="hidden" name="billNum" value="' + this.billId + '"/>');
iframe.append(iForm);
tempCmp.append(iframe);
iForm.submit();
但是我在IE 7和8的iframe.append(iForm)
行有一个问题。在IE 9中,这个问题很有效!
我的代码有什么问题?
编辑:我更多地了解这个问题,也许这个问题导致我在IE9中测试不同的IE版本,更改了图片中的值。模式改变会导致此问题吗?也许它在真正的7和8 IE浏览器中工作正常。你怎么想?
答案 0 :(得分:1)
花了很多时间后我没有找到解决方案,但是我找到了一些解决方法,帮助我在没有任何iframe的IE7,IE8,IE9中下载文件,打开新页面等。 这是代码:
jQuery.download = function(url, data, method){
//url and data options required
if( url && data ){
//data can be string of parameters or array/object
data = typeof data == 'string' ? data : jQuery.param(data);
//split params into form inputs
var inputs = '';
jQuery.each(data.split('&'), function(){
var pair = this.split('=');
inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />';
});
//send request
jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
.appendTo('body').submit().remove();
};
};
$.download('/export.php','filename=mySpreadsheet&format=xls&content=' + spreadsheetData );
也许这会有用,为某人节省时间;) 这里有完整的详细信息jQuery Plugin for Requesting Ajax-like File Downloads