猿问

使用ajax下载文件不适用于firefox

我正在尝试使用 Ajax 下载生成的文件 (pdf),它在 Chrome 和 IE 中运行良好,但在 FireFox 中却没有。这是我的代码:


function Download(urlAction, urlDownload) {


    $.ajax({

        type: "post",

        url: urlAction,

        data: {

            'itemIds': checkedItems,

            'dateMin': datemin.toISOString(),

            'dateMax': datemax.toISOString()

        },

        datatype: "json",

        traditional: true,

        success: function (data) {

            console.log('fff', data);

            if (data.success) {

                window.location = urlDownload;

            }

        }

        error: function (xhr, textStatus, err) {

            console.log("readyState: " + xhr.readyState);

            console.log("responseText: " + xhr.responseText);

            console.log("status: " + xhr.status);

            console.log("text status: " + textStatus);

            console.log("error: " + err);

        }

    });

}

}

在 UrlAction 中,我以 Json 格式生成文件并将其发布到会话中,然后在我的 urlDownload 中再次调用它。在 Chrome 和 IE 中,无需重新加载页面即可下载文件,但在 Firefox 中,它只会重新加载页面。

错误说:

  • 准备状态:0

  • 响应文本:未定义

  • 状态:0

  • 文本状态:错误

  • 错误:未定义


MMMHUHU
浏览 197回答 2
2回答

三国纷争

Jquery $.ajax说:dataType(默认值:Intelligent Guess(xml、json、script 或 html)) 类型:String 您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它所以你可以先尝试删除参数。关于你的错误状态,0你可以在这里找到详细的原因: XMLHttpRequest status 0 (responseText is empty)关于您的错误处理程序,error: function (xhr, textStatus, err):xhr.status显示原因,您必须检查您的服务器端配置;但你没有提到什么是服务器环境。textStatus可以下值:"timeout", "error", "abort", and "parsererror";err 如果请求未到达您的服务器端位置,则可能未定义;这是官方文档:类型:Function( jqXHR jqXHR, String textStatus, String errorThrown ) 请求失败时调用的函数。该函数接收三个参数:jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象、描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数(除了 null)的可能值是“超时”、“错误”、“中止”和“解析器错误”。当发生 HTTP 错误时,errorThrown 接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。从 jQuery 1.5 开始,错误设置可以接受函数数组。每个函数都会被依次调用。注意:对于跨域脚本和跨域 JSONP 请求,不会调用此处理程序。这是一个 Ajax 事件。

波斯汪

对我有用的是我将按钮(调用此方法的按钮)从表单 div 中移除,并且它停止重新加载页面,下载就像一个魅力。
随时随地看视频慕课网APP
我要回答