从未传入JSON参数的JavaScript发送POST请求
我试图从我的网站上调用一个用python编写的Firebase云函数。当我使用从未传入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
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