Laravel IE11可以';无法访问此页面,但该页面有效且可访问
我在IE11中遇到了一个奇怪的问题。我正在运行带有服务器端处理的DataTables,因此我必须创建一个用于导出完整数据集的自定义按钮,因为默认按钮仅导出可见数据集 以下是我的一个按钮的Yajra DataTables for Laravel配置:Laravel IE11可以';无法访问此页面,但该页面有效且可访问,laravel,internet-explorer,datatables,Laravel,Internet Explorer,Datatables,我在IE11中遇到了一个奇怪的问题。我正在运行带有服务器端处理的DataTables,因此我必须创建一个用于导出完整数据集的自定义按钮,因为默认按钮仅导出可见数据集 以下是我的一个按钮的Yajra DataTables for Laravel配置: 'buttons' => [ ['extend' => 'csv', 'text' => '<i class="fa fa-file-excel-o"></i> CSV', 'action'
'buttons' => [
['extend' => 'csv',
'text' => '<i class="fa fa-file-excel-o"></i> CSV',
'action' => 'function(e,dt,node,config){
var data=$.extend(
true,
dt.context[0].oSavedState,
{
columns:dt.context[0].aoColumns.map(function(col){
return {"data":col.data}
})
})
window.location.href = window.location.href +
"?action=csv&" +
$.param(data);
}'
],
...
“按钮”=>[
[“扩展”=>“csv”,
“文本”=>“CSV”,
“操作”=>“功能(e、dt、节点、配置){
变量数据=$.extend(
是的,
dt.context[0]。oSavedState,
{
列:dt.context[0].aoColumns.map(函数(列){
返回{“数据”:col.data}
})
})
window.location.href=window.location.href+
“?操作=csv&”+
$.param(数据);
}'
],
...
该按钮工作正常,它基本上编译了一个列和过滤器列表,并将用户发送到一个Laravel路由,该路由处理action=csv
请求,并生成一个Excel下载,在Chrome和Firefox中自动触发
然而,在IE11中,浏览器重定向到Excel下载路径,但抛出“无法访问此页面”错误消息。我可以在地址栏中看到URL是正确的,奇怪的是,如果我在浏览器中单击“刷新”,CSV下载将被触发,我可以选择保存
每次我点击下载链接时都会发生这种情况。什么原因可能会导致IE11认为该页面无法访问,当它可以访问时?
我试着查看网络工具中的请求/响应标题,一切似乎都很好。有什么想法吗
此外,我还尝试重写window.location逻辑来创建一个超链接元素,将其附加到DOM,触发一次单击,它仍然会产生相同的结果
更多信息
我尝试了其他一些方法,并能够在代码中的任意点弹出下载过程,直到对浏览器的最终响应。浏览器以200状态代码响应,当我查看“网络”选项卡并查看响应正文时,我可以在那里看到我的CSV内容,以及相应的内容配置、内容长度标题。Content类型标题为text/plain,但将其更改为text/csv并没有解决问题
如果IE的“网络”选项卡正确地呈现了所有内容,为什么IE的浏览器呈现程序会显示页面无法显示错误?好吧,我终于能够解决IE/Edge导出问题,问题归结为查询字符串长度 DataTables网格发出一个GET请求,请求中包含与查询相关的所有属性(可见列、应用了哪些筛选器等) 请求参数示例:
{
"action": "csv",
"time": "1529689896632",
"start": "0",
"length": "10",
"order": [
["2","asc"],
["1","asc"]
],
"search": {
"search": "",
"smart": "true",
"regex": "false",
"caseInsensitive": "true"
},
"columns": [
{
"visible": "true",
"search": {
"search": "",
"smart": "true",
"regex": "false",
"caseInsensitive": "false"
},
"data": "programs"
},
// ...
因为有太多的列,这些请求参数创建了一个非常长的查询字符串(在3-4000个字符的范围内)。IE和Edge似乎可以处理一定长度的查询字符串,因为我注意到在查询字符串数据被截断的地方出现了一些错误
最后,我通过省略导出所需的不必要和默认属性值来减少查询字符串长度。现在IE和Edge都会立即响应文件下载,而不是抛出页面未找到或其他奇怪的错误。Jeff我们也遇到了同样的问题,我们可以做些什么来解决这个问题?:)您不能增加查询字符串吗IIS中的g长度?我这样做了,但它不起作用,至少不适用于excel…将再次查看。查看此处,我们的朋友抱歉…似乎他们在当天也有此问题。。。。