当前位置: 首页 > 面试题库 >

如何为HTTP GET请求设置标头并触发文件下载?

澹台博文
2023-03-14
问题内容

(但是我将其他答案之一标记为已接受,而不是我自己的答案,因为它使我半途而废,并以此来奖励自己的努力)

似乎无法通过与链接设置HTTP请求标头<a href="...">,而只能使用来完成XMLHttpRequest

但是,链接到的URL是应下载的文件(浏览器不应导航至其URL),而且我不确定是否可以使用AJAX来完成。

此外,返回的文件是一个二进制文件,而AJAX并非用于此目的。

如何使用添加了自定义标头的HTTP请求触发文件下载?

编辑:修复断开的链接


问题答案:

尝试

html

<!-- placeholder , 
    `click` download , `.remove()` options ,
     at js callback , following js 
-->
<a>download</a>

js

        $(document).ready(function () {
            $.ajax({
                // `url` 
                url: '/echo/json/',
                type: "POST",
                dataType: 'json',
                // `file`, data-uri, base64
                data: {
                    json: JSON.stringify({
                        "file": "data:text/plain;base64,YWJj"
                    })
                },
                // `custom header`
                headers: {
                    "x-custom-header": 123
                },
                beforeSend: function (jqxhr) {
                    console.log(this.headers);
                    alert("custom headers" + JSON.stringify(this.headers));
                },
                success: function (data) {
                    // `file download`
                    $("a")
                        .attr({
                        "href": data.file,
                            "download": "file.txt"
                    })
                        .html($("a").attr("download"))
                        .get(0).click();
                    console.log(JSON.parse(JSON.stringify(data)));
                },
                error: function (jqxhr, textStatus, errorThrown) {
                  console.log(textStatus, errorThrown)
                }
            });
        });

jsfiddle
http://jsfiddle.net/guest271314/SJYy3/



 类似资料:
  • 问题内容: 我的应用程序中有一个需要基本身份验证的特定请求,因此我需要为该请求设置Authorization标头。我读过有关设置HTTP请求标头的信息,但据我所知,它将为该方法的所有请求设置标头。我的代码中有这样的内容: 但我不希望我的每一个帖子请求都发送此标头。有什么方法可以仅为我想要的一个请求发送标头吗?还是我必须在请求后将其删除? 问题答案: 传递给每次调用标头的config对象中有一个标头

  • 问题内容: 我需要将“授权”请求标头设置为httpXMLRequest。在网格定义中,我尝试通过ajaxGridOptions进行如下设置: 并使用如下所示的beforeSend事件: 以上都不适合我。什么是正确的语法? 谢谢!! 问题答案: 例如,您可以使用jqGrid的loadBeforeSend事件处理程序,其定义如下:

  • 大家好。 此外,在请求中有一个基本认证,在这种情况下,我将它包含在邮递员中,它工作正常。另一方面,在我的C#脚本中,我是这样执行的: *这是我的模型,其中包含所有数据,用于将对象序列化为JSON。 *这是我创建POST请求的助手类。我插入所有需要的数据,然后将对象序列化为JSON,正如你们中的一些人建议我这样做的那样。它相当干净。 如果有人知道如何处理这件事,那将是非常感激的。我将继续尝试如何解决

  • 问题内容: 我想在使用Spring的请求中设置的值。 这是我的Spring请求处理代码 这是我的Java REST客户端: 这对我有用;我从服务器端获取了JSON字符串。 我的问题是:当我使用RestTemplate时,如何指定标头(例如)和请求方法(例如,…)? 问题答案: 我建议使用可以接受的方法之一,也可以为其设置。(你也可以指定要使用的HTTP方法。) 例如, 我喜欢这种解决方案,因为它是

  • 我的问题是:在使用RESTTemplate时,如何指定头(例如、,...)和请求方法(例如、,...)?

  • 问题内容: 在使用XMLHttpRequest进行AJAX调用时,似乎无法从JavaScript更改大多数请求标头。请注意,必须在Gecko浏览器中调用when。设置_Referer时_ ,它没有设置(我查看了使用Firebug和Tamper Data发送的请求标头)。当我设置User-Agent时,它完全搞砸了AJAX调用。但是,设置接受和_内容类型_确实可以。我们是否无法在Firefox 3中