Laravel IE11可以';无法访问此页面,但该页面有效且可访问

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'

我在IE11中遇到了一个奇怪的问题。我正在运行带有服务器端处理的DataTables,因此我必须创建一个用于导出完整数据集的自定义按钮,因为默认按钮仅导出可见数据集

以下是我的一个按钮的Yajra DataTables for Laravel配置:

'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…将再次查看。查看此处,我们的朋友抱歉…似乎他们在当天也有此问题。。。。