簡體   English   中英

HTTP POST 到 Google 表格(通過 Apps 腳本)未導入 JSON 正文消息內容?

[英]HTTP POST to Google Sheets (via Apps Script) not importing JSON body message contents?

我設計了一個 web 應用程序,它通過 HTTP POST 和 Google Apps 腳本將訂單信息發布到 Google 表格。 但是,我正在努力發布並從正文 JSON 中提取訂單信息。 我嘗試了 2 種不同的方法,它們都 output 具有相似的信息但具有相同的數據類型 - FileUpload。 我什至嘗試將其作為 FormData() 的參數導入,但反復附加參數感覺不太正確。

方法一

function method1() {
  var xml = new XMLHttpRequest();
  var data = JSON.stringify({ firstName: "Jay", lastName: "Smith" });
  xml.open("POST", url, true);
  /*   xml.setRequestHeader("Content-type", "application/json"); */
  xml.onreadystatechange = function () {
    if (xml.readyState === 4 && xml.status === 200) {
      alert(xml.responseText);
    }
  };
  xml.send(data);
}

Output

{postData=FileUpload, contextPath=, contentLength=38.0, parameters={}, parameter={}, queryString=}

注意 setRequestHeader() function 是如何被注釋的。 如果取消注釋將內容類型設置為 JSON,則不會出現 output。 為什么它不起作用?

方法二

function method2() {
  const body = {
    firstName: "Jay",
    lastName: "Smith",
  };
  const options = {
    method: "POST",
    body: JSON.stringify(body),
  };

  fetch(url, options).then((res) => res.json());
}

Output

{contextPath=, parameters={}, parameter={}, queryString=, postData=FileUpload, contentLength=38.0}

方法3(我什至應該考慮這個嗎?)

function method3() {
  const formData = new FormData();
  formData.append("firstName", "Jay");
  formData.append("lastName", "Smith");
  fetch(url, {
    method: "POST",
    body: formData,
  }).then((res) => res.json());
}

Output

{contentLength=243.0, parameter={firstName=Jay, lastName=Smith}, queryString=, contextPath=, parameters={lastName=[Ljava.lang.Object;@6c4aece6, firstName=[Ljava.lang.Object;@3c461e46}}

內容長度要大得多……這似乎不是一個有效的概念。


Google Apps 腳本 doPost() Function

function doPost(e) {
  const sheet = SpreadsheetApp.openById(SHEETID).getSheetByName('Testing Inputs');
  sheet.getRange(3,1).setValue(e); // To display POST output
  const data = JSON.parse(request.postData.contents)
  sheet.getRange(5,1).setValue(data['firstName']) // Not writing "Jay"? 
  sheet.getRange(5,2).setValue(data['lastName']) // Not writing "Smith"?
}

一般來說,根據 contentLength output 判斷,似乎數據是作為正文消息內容通過的,但考慮到 postData 是 FileUpload,它不是 JSON 嗎? 這可能會導致我的 Apps 腳本也無法提取它嗎? 另外,我認為我讀到使用 fetch() 比使用 XMLHttpRequest() 好得多,所以我應該使用我的方法 2 嗎? 仍然不確定使用 Apps 腳本將其填充到工作表中的單個單元格中我做錯了什么?

任何幫助表示贊賞!

Output 使用sheet.getRange(3,1).setValue(JSON.stringify(e))

{"parameter":{},"postData":{"contents":"{\"firstName\":\"Jay\",\"lastName\":\"Smith\"}","length":38,"name":"postData","type":"text/plain"},"parameters":{},"contentLength":38,"queryString":"","contextPath":""}

基於sheet.getRange(3,1).setValue(JSON.stringify(e))提供的 output (我不確定你的哪個方法生成了這個,但那個方法看起來是正確的),你的doPost所寫的應該可以工作,有一個修改:我沒有看到定義的變量request ,所以我假設您打算request成為 http 請求doPost ,在應用程序腳本e中定義文檔)。 因此更改此行

const data = JSON.parse(request.postData.contents)

對這個

const data = JSON.parse(e.postData.contents)

暫無
暫無

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

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