- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 jquery 下载 Excel 文件时遇到问题。我在一些论坛上读到,使用 ajax 是不可能实现这一点的,在一些论坛上他们说你可以通过将结果发送到 iframe 来实现这一点。到目前为止我还没有能够解决我的问题。
技术细节:我使用一些参数生成对数据库的查询,Web 服务执行此查询并返回在 openxml 中生成的 excel 文件并返回字节。我使用的是asp.net 4.0。如果我使用常规的 webcontrols 和 ajax,如果在更新面板中我将触发器设置为 asp:postbacktrigger 到按钮控件,则文件下载不会有问题。
我试图仅使用 jqueryUi 控件和 jquery 来实现相同的结果。
在服务器端我有两种方法:
导出到Excel:此方法接收参数以调用返回 excelfile 的其余 Web 服务。
按字节发送Excel文件这个是在请求中返回文件的方法。
这是 C# 代码:
[WebMethod]
public static void ExportToExcel(List<int> status, List<Guid> companyId, List<DateTime> dateFrom, List<DateTime> dateTo, bool isGroupedByStore)
{
ReconciliationModule server = new ReconciliationModule(ConfigurationManager.AppSettings["serviceNamespace"], ConfigurationManager.AppSettings["ACSHostUrl"], ConfigurationManager.AppSettings["scopeAddress"]);
SummaryReport summaryReport = new SummaryReport();
List<Tuple<Guid, DateTime, DateTime, int>> parameters = new List<Tuple<Guid, DateTime, DateTime, int>>();
for (int i = 0; i < dateTo.Count; i++)
{
parameters.Add(new Tuple<Guid, DateTime, DateTime, int>(
companyId[i],
dateFrom[i],
dateTo[i],
status[i]
));
}
byte[] x = server.GetSummaryReportInExcel(ConfigurationManager.AppSettings["userName"], ConfigurationManager.AppSettings["pwdOrSymmetricKey"], bool.Parse(ConfigurationManager.AppSettings["isSymmetricKey"]), isGroupedByStore, parameters);
SendExcelFileByBytes(x);
}
private static void SendExcelFileByBytes(byte[] x)
{
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"SummaryReport.xlsx\"");
System.Web.HttpContext.Current.Response.AddHeader("Content-Type", "application/force-download");
System.Web.HttpContext.Current.Response.AddHeader("Content-Type", "application/download");
//System.Web.HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";//excel file
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.BinaryWrite(x);
//System.Web.HttpContext.Current.Response.Close();
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
}
对于 jscript,我的 callAjaxFunction 失败并返回 200 OK 消息,结果在响应文本中。因此,在出现故障时执行的函数中,我在表中显示响应文本。如果有人可以帮助我以更好的方式做到这一点,我将不胜感激。这是 jscript 代码:
//Executes Ajax Calls using json as data type
function callAjax(callType, urlAddress, dataToSend, fnSucceeded, fnFailed) {
$.ajax({
type: callType,
url: urlAddress,
contentType: "application/json; charset=utf-8",
data: dataToSend,
dataType: "json",
success: fnSucceeded,
error: fnFailed
});
}
//TODO: This function is the one i need to correct
function getSummaryReportInExcel() {
ShowLoader('#reconciliation');
var isGroupedByStore = new Boolean($('#CompanyTypes :checkbox').attr('checked'));
var stat = getStatus();
var status = new Array();
var companyId = new Array();
var dateFrom = new Array();
var dateTo = new Array();
var companiesToSearch = $('#CompanyConfigurations :checkbox:checked');
//populating the parameters
$(companiesToSearch).each(function (i, currentCompany) {
status.push(stat);
companyId.push($(currentCompany).select('checkbox').attr('value'));
dateFrom.push($(currentCompany).parents().find('td:eq(2) :input').attr('value'));
dateTo.push($(currentCompany).parents().find('td:eq(3) :input').attr('value'));
});
var data = "{ status : " + JSON.stringify(status) + ", companyId : " + JSON.stringify(companyId) + ", dateFrom : " + JSON.stringify(dateFrom) + ", dateTo : " + JSON.stringify(dateTo) + ", isGroupedByStore : " + isGroupedByStore + " }";
alert(data);
callAjax(
"POST", "UIJquery.aspx/ExportToExcel",
data,
//is not entering here
function () {
alert('Hola' + result.toString());
//header.
HideLoader();
},
//AjaxFailed
function (result) {
//alert(concatObject( result));
$('#SearchResults').append(concatObject(result));
//var iFrame = "<iframe src=" + result.responseText + "></iframe>";
$('#IResults').html(result.responseText);
//window.open(result.responseText, 'Download');
HideLoader();
//alert(concatObject(result));
}
);
}
这是我在 google chrome 开发者工具中看到的内容
HeadersPreviewResponseTiming
Request URL:http://localhost:53144/UIJquery.aspx/ExportToExcel
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:216
Content-Type:application/json; charset=UTF-8
Host:localhost:53144
Origin:http://localhost:53144
Referer:http://localhost:53144/UIJQuery.aspx
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11
X-Requested-With:XMLHttpRequest
Request Payload
{ status : [15,15], companyId : ["15afbacb-5c0c-4402-a5af-0f5a53221bbb","041d6a48-35ca-4d55-97ec-4fd5f4bdd11f"], dateFrom : ["11/06/2011","11/06/2011"], dateTo : ["11/12/2011","11/12/2011"], isGroupedByStore : true }
Response Headersview source
Cache-Control:private, max-age=0
Connection:Close
Content-Disposition:attachment; filename="SummaryReport.xlsx"
Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Date:Wed, 28 Mar 2012 18:22:32 GMT
Server:ASP.NET Development Server/10.0.0.0
Transfer-Encoding:chunked
X-AspNet-Version:4.0.30319
任何建议或更好的方法请告诉我,谢谢。
最佳答案
类似的事情......
<script type="text/javascript">
function downloadExcelFile(url, dataToSend) {
url += '?';
for(var k in dataToSend) {
url += k + '=' + encodeURIComponent(dataTosend[k]) + '&';
}
window.location = url;
}
</script>
这会将基本 url 作为第一个参数,并使用包含参数的对象作为第二个参数,从中构造一个完整的 url 并将浏览器重定向到它...例如
downloadExcelFile('http://www.example.com/myWebservice/downloadExcel.aspx', {
param1: 'value1',
param2: 'value2'
});
在这种情况下,浏览器将被重定向到
http://www.example.com/myWebservice/downloadExcel.aspx?param1=value1¶m2=value2&
关于jquery - 如何从 byte[] 中的 webmethod 下载 javascript 或 jquery 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913758/
我有以下代码: foreach (byte b in bytes) { byte inv = byte.MaxValue - b; // Add the new value to a
我需要从这个文本文件source.txt中读取内容并将内容反向写入这个文本文件destination.txt。读取和写入必须使用逐字节完成! 我使用 BufferedReader 和 Buffered
我需要存储大量 RGB 颜色对象。对于某些常见用途,这些占用了我的应用程序总内存的 8% 到 12%。我目前将其定义如下: class MyColor { byte red; byte green;
我有一个由字节数组表示的整数。 byte[] result = getResult(); resultInt1 = Integer.parseInt(Bytes.toString(result));/
我正在尝试使用 Rusoto 库调用 AWS Lambda 函数。该请求有一个 JSON 编码的有效负载,我目前将其作为一个字符串,但该库为此坚持使用 bytes::bytes::Bytes 结构。我
我正在尝试基于 Tokio's example 编写一个 TCP 服务器. 当我尝试发送缓冲区时,编译器返回错误 0277。 我的代码:(playground) extern crate tokio;
我知道我可以通过 IList 进行枚举,例如: public byte[] ConvertToByteArray(IList> list) { IList newList = new List
考虑这样一个文本文件: Some text here. --- More text another line. --- Third part of text. 我想把它分成三部分,用---分隔符分开。
如果我有一个字节变量:byte b = 0; 为什么以下工作: b++; b += 1; // compiles ...但这不是吗? b = b + 1; // compile er
我有一个简单的字节数组,我想从中获取颜色。我的计划是用红色表示三位,绿色表示三位,蓝色表示两位。 8 位。 我认为颜色是正确的: 如有错误请指正 byte[] colours = new byte[
我的目标是比较两个字节数组中的两个字符串值。它实际上需要创建两个新的字符串对象才能使用 contains 方法。是选择正确还是有什么办法可以使用优化方式而不使用新的关键字。 if(new String
我正在使用github.com/tarm/serial来连接一些串行仪器。在开发过程中,我使用/dev/ttyp0和/dev/ptyp0对,其中go进程连接到一个,我使用screen连接到另一个。我编
好的,所以如果一个字节是 8 位,那么半字节就是 4 位。并且您可以将四分之一字节作为 2 位(尽管我想,如果有的话,它会被称为双位)。 虽然这是一致的,但如果我使用这个词,有人会感到困惑(或惊讶)吗
我在解释文件时遇到问题。文件构建如下: "name"-@-"date"-@-"author"-@-"signature" 签名是一个字节数组。当我读回文件时,我将其解析为 String 并拆分它: m
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
Java 让我很难过,因为它需要 ArrayList 的包装类秒。我将如何添加 byte[]到 ArrayList ? 最佳答案 LOL 认为我必须包装所有东西。 ArrayList作品。谢谢一晒。
我有一个 16 字节的 md5 散列,我需要使用 XOR 将其“折叠”成 4 字节数据:{1st 4 bytes} XOR {2nd 4 bytes} XOR {3rd 4 bytes} XOR {4
我正在学习SMSC smc91cx驱动代码,我学习了如何根据Application Note 9-6的说明编写smc91c111网卡的测试代码。 .我无法理解“传输数据包”下的以下说明: Write
我必须附加(可变数量的)字节数组。集合似乎只适用于包装类,即 Byte。大约 20 小时后,我想到了这个,并且它有效,但我想知道它是否可以改进(添加到列表,但欢迎任何其他改进建议:),即 Collec
我有两个基本相同的操作: insert_bytes(from, count) delete_bytes(start, stop) -> delete_bytes(from, count) insert
我是一名优秀的程序员,十分优秀!