如何从 Jquery & ajax 的响应下载 JSON 文件

How to download JSON file from response by Jquery & ajax

与此类似的问题:Download a file by jQuery.Ajax

有我的代码:

    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 文件,其中包含“underfined”内容。

有一个问题:如何将response中的数据写入blob对象?

问题是因为您正在使用 response 变量,该变量保存从 $.ajax() 调用返回的 jqXHR 对象。此对象没有 data 属性,因此您会在输出中看到 undefined

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

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

另请注意,根据您需要支持的浏览器,您可能需要将 link 元素附加到 DOM 才能引发 click 事件.


Using this code I get [object Object] in the export.json file

这是因为 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));