![](/img/trans.png)
[英]How do I make my PHP API return JSON to a Javascript HTTP POST/GET request?
[英]How do i http request post/get to a link?
我不知道如何向链接发出 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
object 可用于从 Z686155AF75A60A0F6EZD83E 发出 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);
}
我找到了一种方法:对于感兴趣的人,我在这里是如何做到的,代码如下:
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.");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.