从未传入JSON参数的JavaScript发送POST请求

从未传入JSON参数的JavaScript发送POST请求,javascript,firebase,http,post,google-cloud-functions,Javascript,Firebase,Http,Post,Google Cloud Functions,我试图从我的网站上调用一个用python编写的Firebase云函数。当我使用curl从命令行调用该函数时,该函数工作得非常好,然而,当我尝试从JavaScript执行相同操作时,我遇到了以下问题基本上没有收到JSON参数。 我如何调用JavaScript var xmlhttp = new XMLHttpRequest(); var theUrl = "https://us-central1-scan2checkout.cloudfunctions.net/registerUser"; xm

我试图从我的网站上调用一个用python编写的Firebase云函数。当我使用
curl
从命令行调用该函数时,该函数工作得非常好,然而,当我尝试从JavaScript执行相同操作时,我遇到了以下问题基本上没有收到JSON参数。

我如何调用JavaScript

var xmlhttp = new XMLHttpRequest();
var theUrl = "https://us-central1-scan2checkout.cloudfunctions.net/registerUser";
xmlhttp.open("POST", theUrl,true);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send('{"auth":"ac_Fn0GuKLhuh8yltMVlmFeBkQpdpaTrqug"}');

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == XMLHttpRequest.DONE) {
        console.log(xmlhttp.responseText);
    }
}
云功能

def registerUser(request):
    print(request) # Printing '<Request 'http://us-central1-scan2checkout.cloudfunctions.net/' [OPTIONS]>'
    print(request.json) # Printing 'NONE' :(
    auth = request.json['auth'] # Issue is here
    # ... SOME STUFF ...
    return {...},201
如果您现在运行它,您可能会得到类似“授权码过期”这样的信息,这是正确的


要处理此请求,您需要在云函数中设置适当的访问控制允许-*头,以匹配您想要接受的请求。请参阅用Python编写的CORS函数的示例

您会注意到CORS由两个请求组成:飞行前OPTIONS请求和随后的main请求

飞行前请求包含以下标头:

  • 访问控制请求方法-指示将在主请求中发送的方法
  • 访问控制请求标头-指示附加标头以及主请求的来源

  • 如果有帮助,请告诉我。

    你能猜出
    [OPTIONS]
    是什么意思吗…?@misorude请看后面的行!你认为我为什么要打印它。。。。结果是没有当然,结果是没有,它必须。没有人提出这个要求。@misorude这是全部问题。所以
    xmlhttp.send(“{”auth:“ac_fn0guklhuh8yltmvlmfebkqpdpatrqg”)
    没有传递数据?看起来唯一的区别是
    ;JS中的字符集=UTF-8
    。你试过把它拿走吗?
    time curl -v -X POST -d '{"auth":"ac_Fn0GuKLhuh8yltMVlmFeBkQpdpaTrqug"}' -H "Content-type: application/json" https://us-central1-scan2checkout.cloudfunctions.net/registerUser