如何在不使用AJAX的情况下发布原始JSON数据?

时间:2016-08-05 23:26:34

标签: javascript jquery json

我有一个我要调用的API端点。这似乎是一件容易的事,但令我惊讶的是,它并非如此。这就是原因:

  • 我无法使用AJAX,因为此API的响应是要下载的文件。所以我可能需要创建一个隐藏的iframe并从那里发送常规的POST请求。
  • 我需要将数据作为原始JSON字符串POST,而不是表单数据。 API不接受键值对。因此,我无法创建HTML表单并提交。
  • 这不是我的API。我无法改变它。

现在我被卡住了。还有什么我可以尝试的吗?

1 个答案:

答案 0 :(得分:2)

你可以用ajax或raw XMLHttpRequest()

来做到这一点

在你的问题的提交中已经提到的一些事情可以解释这里发生了什么。

首先,您需要一个请求对象。发布是没有问题的,您将传递您必须在那最后一行发送的JSON有效负载。 POST成功后,您需要获取返回的二进制文件并为正确的文件类型创建一个Blob,一个objecctUrl,最后是一个您为用户单击的隐藏链接。请注意下载属性。这让现代浏览器知道它是下载链接,它允许下载滚动。

我可能从stackoverflow获得了一些代码......

  const xlsx = {};
  const xhr = new XMLHttpRequest();
  xhr.open('POST', '/data/some.ashx');
  xhr.responseType = 'blob';
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.onload = function loadXLXS() {
    let objectUrl;
    if (this.status === 200) {
       blob = this.response
       csvURL = window.URL.createObjectURL(blob);
       tempLink = document.createElement('a');
       tempLink.href = csvURL;
       tempLink.setAttribute('download', workBookName);
       tempLink.click();
    }
  };
  xhr.send(JSON.stringify(xlsx));