【问题标题】:Url query string in fetch api in javascriptjavascript中fetch api中的url查询字符串
【发布时间】:2016-04-14 01:13:53
【问题描述】:

如何使用fetch api javascript (https://github.com/github/fetch) 传递查询字符串?

var url = "http://www.abcd.com";
var query = {
    a: "test",
    b: 2
};

当我将一些参数传递给fetch时,上面应该转换为http://www.abcd.com?a=test&b=2

【问题讨论】:

    标签: javascript google-chrome fetch-api


    【解决方案1】:
    var params = Object.keys(query)
                       .map((key) => encodeURIComponent(key) + "=" + encodeURIComponent(query[key]))
                       .join("&")
                       .replace(/%20/g, "+");
    
    fetch(url + "?" + params);
    

    或者使用 options 对象 - but this will NOT work with GET and HEAD method

    fetch(url, {
        method: "POST",
        body: convertObjectToFormData(query)
    }).then(...);
    
    function convertObjectToFormData(obj) {
        var formData = new FormData();
        for (var key in obj) {
            formData.append(key, obj[key]);
        }
        return formData;
    }
    

    【讨论】:

    • fetch不支持查询?
    • 您可以在options 对象中将它们作为body 传递,但您必须将它们转换为URLSearchParams(尚不支持)或FormData。以我的编辑为例。
    • TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body @Andreas,当我尝试你的例子时,我遇到了错误
    • 对不起。看起来我认为window.fetch 像 jQuery(或任何其他库)一样工作,如果方法是GET,它将把来自body 的参数作为查询字符串。但是Standard(第31步)不允许bodyGETHEAD请求......所以你将不得不坚持使用选项一或将方法更改为POST
    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多