为什么我的服务器没有收到任何内容?

时间:2019-09-25 16:02:15

标签: javascript ajax content-type form-data

我有这个:

function base64ToBlob(base64, mime) 
{
    mime = mime || '';
    var sliceSize = 1024;
    var byteChars = window.atob(base64);
    var byteArrays = [];

    for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
        var slice = byteChars.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    return new Blob(byteArrays, {type: mime});
}


function send() {
    let blob = base64ToBlob(picture, "image/jpeg");
    let formData = new FormData();
    formData.append("picture", blob)
    formData.append("a", 70)
    formData.append("b",  5)
    
    var request = new XMLHttpRequest();
    request.open("GET", "server/far/away/that/need/content-type");
    request.setRequestHeader("Content-type", "HELP HERE")
    request.send(formData);
}

当我调用send函数时,我的服务器(firebase的云函数)没有 接收任何数据。我认为这是因为没有内容类型,并且服务器无法使用我发送的数据。

这就是为什么我需要内容类型。

对不起,我的英语不太好:/(我是法语)

1 个答案:

答案 0 :(得分:1)

  

当我调用send函数时,我的服务器(firebase的云函数)没有收到任何数据。

那是因为您使用了错误的HTTP方法。 GET没有正文,但这是您发送数据的正文:

var request = new XMLHttpRequest();
request.open("GET", "server/far/away/that/need/content-type");
//           ^^^^----------------------------------------------- method
request.setRequestHeader("Content-type", "HELP HERE")
request.send(formData);
//           ^^^^^^^^------------------------------------------- request body

来自MDN

  

send()接受一个可选参数,可用于指定请求的正文;它主要用于诸如PUT之类的请求。如果请求方法是GETHEAD,则会忽略body参数,并将请求正文设置为null。

内容类型可能无关紧要,但是如果要像这样在正文中发送数据,则需要使用POSTPUT