javascript - 我如何 http 请求发布/获取链接?
问题描述
我不知道如何对链接进行 http 请求。我正在尝试使用下面的链接发布到谷歌应用程序脚本。我希望该链接对您有所帮助,因为我无法真正解释我要做什么。我只想能够通过下面的链接运行谷歌脚本。(我之前在 Node.JS 应用程序上使用过它。)所以我希望能够通过 Javascript 执行下面的链接。(适用于我的应用程序的 JavaFX。)
String ScriptUrl = "https://script.google.com/macros/s/" + ScriptID + "/exec?sheet=TestSheet&key=" + EnteredPlayerName + "&value=" + SelectedItemName;
(谷歌脚本所做的是:它获取密钥(在链接中)并在电子表格中创建一个新行。在这一行中,我创建了一个包含值的列(在链接中)。
谷歌脚本:
function doGet(e) {
try {
var key = e.parameter["key"]
var sheetName = e.parameter["sheet"]
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName(e.parameter["sheet"]);
var data = sheet.getDataRange().getValues();
var value
for (var i = 1; i < data.length; i++) {
if (data[i][0] == key) {
value = data[i][1];
}
}
if (value) {
return ContentService
.createTextOutput(JSON.stringify({
"result": "success",
"value": value
}))
.setMimeType(ContentService.MimeType.JSON);
} else {
return ContentService
.createTextOutput(JSON.stringify({
"result": "error",
"error": "Key not found"
}))
.setMimeType(ContentService.MimeType.JSON);
}
} catch (e) {
return ContentService
.createTextOutput(JSON.stringify({
"result": "error",
"error": "Database does not exist"
}))
.setMimeType(ContentService.MimeType.JSON);
}
}
function doPost(e) {
var sheetNom = e.parameter["sheet"];
var lock = LockService.getPublicLock();
lock.waitLock(30000);
try {
var key = e.parameter["key"]
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName(e.parameter["sheet"]);
var data = sheet.getDataRange().getValues();
var headRow = e.parameter.header_row || 1;
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow() + 1;
var row = [];
for (var i = 1; i < data.length; i++) {
if (data[i][0] == e.parameter["key"]) {
nextRow = i + 1;
}
}
for (i in headers) {
row.push(e.parameter[headers[i]]);
}
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
return ContentService
.createTextOutput(JSON.stringify({
"result": "success",
"row": nextRow
}))
.setMimeType(ContentService.MimeType.JSON);
} catch (e) {
return ContentService
.createTextOutput(JSON.stringify({
"result": "error",
"error": e,
"test": "Test",
"sheet": sheetNom
}))
.setMimeType(ContentService.MimeType.JSON);
} finally {
lock.releaseLock();
}
}
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
SCRIPT_PROP.setProperty("key", doc.getId());
}```
解决方案
浏览器提供了一个XMLHttpRequest
对象,可用于从 JavaScript 发出 HTTP 请求:
function httpGet(ScriptUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", ScriptUrl, false ); // false for synchronous request
xmlHttp.send( null );
return xmlHttp.responseText;
}
提示:不鼓励同步请求,并且会产生类似的警告。理想情况下,您不应该使用同步请求。
您应该发出异步请求并在事件处理程序中处理响应。
function httpGetAsync(ScriptUrl, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", ScriptUrl, true); // true for asynchronous
xmlHttp.send(null);
}
推荐阅读
- python - 使用 Python 数据类输出原始 JSON
- visual-studio-code - 如何在 vscode 自定义编辑器扩展中捕获“查找”命令?
- scala - Gatling HttpPost 设置表单数据
- php - mb_substr() 来自 json_decode()'d emoji
- android - 在 Activity 和 Fragment 之间共享数据时为 Null
- javascript - 隐藏js元素
- javascript - 从另一个文件NodeJS启动时,不能在类构造函数中使用__filename作为默认值
- npm - 我尝试安装 enmap 并收到此错误,我不知道如何解决它
- amazon-web-services - 在 Tomcat 服务器中运行的 AWS 应用程序中,我是否需要执行任何特殊操作来启用传输中加密?
- c# - 无法为列表中的列表翻译 .NET Core 3.1 LINQ 表达式