簡體   English   中英

從JavaScript發送POST請求而不傳遞JSON參數

[英]Sending a POST request from JavaScript not passing in JSON params

我正在嘗試從我的網站調用以python編寫的Firebase Cloud函數。 當我使用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

使用命令行時的工作方式

time curl -v -X POST -d '{"auth":"ac_Fn0GuKLhuh8yltMVlmFeBkQpdpaTrqug"}' -H "Content-type: application/json" https://us-central1-scan2checkout.cloudfunctions.net/registerUser

如果您現在運行此程序,則可能會得到正確的“授權碼已過期”之類的信息。

要處理此請求,您將需要在Cloud Function中設置適當的Access-Control-Allow- *標頭以匹配您要接受的請求。 請查看用Python編寫的CORS函數的示例

您會注意到,CORS由兩個請求組成:一個預檢OPTIONS請求和一個緊隨其后的請求。

預檢請求包含以下標頭:

  1. Access-Control-Request-Method-指示將在主請求中發送的方法。
  2. Access-Control-Request-Headers-指示其他報頭以及主請求的來源。

讓我知道是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM