我不知道如何对链接进行http请求。我尝试通过下面的链接发布到Google Apps脚本。我希望该链接对您有所帮助,因为我无法真正解释我要做什么。我只希望能够通过以下链接运行Google脚本。 (我以前在Node.JS应用程序上使用过它。)因此,我希望能够通过Javascript执行下面的链接。 (我的应用程序为JavaFX。)
String ScriptUrl = "https://script.google.com/macros/s/" + ScriptID + "/exec?sheet=TestSheet&key=" + EnteredPlayerName + "&value=" + SelectedItemName;
(google脚本的作用是:它获取键(在链接中)并在电子表格中创建新行。在此行中,我创建了一个带有值的列(在链接中)。 / p>
Google脚本:
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());
}```
答案 0 :(得分:0)
浏览器提供了一个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);
}
答案 1 :(得分:0)
我找到了一种方法!对于有兴趣的人,我的代码是这样的:
String ScriptUrl = "https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec?sheet=TestSheet&";
String post_data = "key=" + EnteredPlayerName + "&value=" + SelectedItemName;
try {
URL url = new URL(ScriptUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoOutput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(post_data.getBytes());
outputStream.flush();
outputStream.close();
String line= "";
InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder response = new StringBuilder();
while ((line=bufferedReader.readLine())!=null){
response.append(line);
}
bufferedReader.close();
System.out.println("Response: " + response.toString());
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in sending request.");
}