Javascript 如何通过Jquery从response下载JSON文件;AJAX

Javascript 如何通过Jquery从response下载JSON文件;AJAX,javascript,jquery,ajax,file,save,Javascript,Jquery,Ajax,File,Save,与此类似的问题: 这是我的代码: function saverequest(url, data) { var response = $.ajax({ url: url, timeout: requestTimeout, global: false, cache: false, type: "POST", data: data, dataType: &

与此类似的问题:

这是我的代码:

    function saverequest(url, data) {
    var response = $.ajax({
        url: url,
        timeout: requestTimeout,
        global: false,
        cache: false,
        type: "POST",
        data: data,
        dataType: "json",
        success: function () {
            var blob = new Blob([response.data], {type : 'application/json'});
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.download = "export.json";
            link.click();
        }
    });

    return response;
}

如图所示,服务器端使用普通json数据文件进行响应

但这段代码保存了export.json文件,其中包含“欠定义”的内容


有一个问题:如何从response向blob对象写入数据?

这个问题是因为您正在使用
response
变量,该变量保存从
$.ajax()调用返回的jqXHR对象。此对象没有
数据
属性,因此在输出中可以看到
未定义

根据您使用的模式,您应该在
success
处理程序函数中定义一个参数,该函数接收请求中的JSON数据,然后使用该参数。试试这个:

函数保存请求(url、数据){
返回$.ajax({
url:url,
超时:请求超时,
全球:错,
cache:false,
类型:“POST”,
数据:数据,
数据类型:“json”,
成功:函数(数据){//注意此处的“数据”
var blob=新blob([数据]{
键入:“application/json”
});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download=“export.json”;
link.click();
}
});
}
还要注意的是,根据需要支持的浏览器,在DOM上引发
单击事件之前,可能需要将
链接
元素附加到DOM中


使用此代码,我在export.json文件中获得了
[object object]

这是因为JSON持有的是一个对象,而不是
Blob()
构造函数所期望的数组。要解决此问题,请将
href
中的数据改为纯文本:

// change the AJAX request to retrieve the JSON as text (without deserialisation)
dataType: 'text'

// amend the href of the link to use text instead of a Blob
link.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(data));

使用此代码,我在export.json文件中得到“[object object]”,在这种情况下,响应似乎是一个对象,而不是
Blob
构造函数所要求的数组。我已经更新了答案,以解决您所说的更改的link.href-相同的结果,[对象对象]在文件中尝试将
数据类型:'json'
更改为
数据类型:'text'
,抱歉坚持,还有一个问题,我需要添加对IE11的支持,那么我该怎么做?