Jquery.post的fetch analog

时间:2017-09-06 07:47:05

标签: jquery fetch-api

我尝试从jQuery.post转移到名为fetch的默认功能以发出请求。我意识到,看起来相同的查询有不同的行为。

jQuery.post

jQuery.post({
    type: "POST",
    url: '/core/comment/add',
    data: {
        type: "article",
        identity: 1931,
        body: "Some stuff"
    }
}).done(function() {
    console.log(arguments);
}).fail(function() {
    console.log("fail");
});

fetch('/core/comment/add', {
    method: 'POST',
    headers: {
        'Accept': 'application/json, text/plain, */*',
        'Content-Type':'application/json',
    },
    body: JSON.stringify({
        type: "article",
        identity: 1931,
        body: "Some stuff"
    })
}).then(function(response) {
    console.log(response);
}).catch(function(e) {
    console.log(e);
});

jQuery.post案例中,一切正常,但fetch返回状态为404.我还尝试添加credentials: 'same-origin'选项,尝试发送数据w / o {{ 1}}和标题,但没有改变 - $ _POST是空的。 那么有什么区别以及如何实现相同的行为?

1 个答案:

答案 0 :(得分:0)

https://pastebin.com/yw9xj5ZD显示jQuery.post已发送application/x-www-form-urlencoded数据,因此要使用Fetch API执行相同操作,请使用以下代码:

fetch('/core/comment/add', {
    method: 'POST',
    headers: {
        'Accept': 'application/json, text/plain, */*',
        'Content-Type':'application/x-www-form-urlencoded',
    },
    body: "type=article&identity=1931&body=Some stuff"
    })
}).then(function(response) {
    console.log(response);
}).catch(function(e) {
    console.log(e);
});

那是:

  • Content-Type请求标头值更改为application/x-www-form-urlencoded
  • 使用body的字符串,格式为type=article&identity=1931&body=Some stuff