我试图接收一些数据被发送到一个网络钩子,并使用它。我能够接收数据并将其转换为json字符串,但是我希望将json字符串分配给一个全局变量,以便可以在其他地方和其他函数中使用它。
我首先声明变量,然后在收到变量时尝试将json字符串赋值给它,但它似乎不起作用--该变量仍然是“未定义的”
var jsonData;
function doPost(e){
try{
var jsonString = e.postData.getDataAsString();
setLog("***json String = " + jsonString + " ***");
jsonData = JSON.parse(jsonString);
}
catch(e){
setLog("***Exception occured = "+JSON.stringify(e) + " ***");
}
}
我对Javascript非常陌生,我不知道我在哪里出了问题。
在其他地方查看时,我发现只要脚本运行为Google脚本,全局变量就会被更改,但是每次运行脚本后,我都不需要这些变量保持不变。我只需要在其他函数中使用全局变量。
发布于 2018-04-19 14:33:20
您希望在其他函数中使用jsonData
。我认为你的处境有三种模式。
模式1
这是一个简单的解决方案。您可以在jsonData
中重新声明doPost(e)
。这样,就会出现undefined
。因此,修改如下。在本例中,jsonData
是在运行脚本完成后清除的。
发自:
var jsonString = e.postData.getDataAsString();
致:
jsonString = e.postData.getDataAsString(); // Remove "var"
模式2
这是一个解决方案,即使运行的脚本已经完成并再次运行,也可以使用jsonData
。但这是有时限的。在本例中,它使用缓存服务。当使用缓存服务时,该值必须是字符串数据。
function doPost(e){
try{
var jsonString = e.postData.getDataAsString();
setLog("***json String = " + jsonString + " ***");
// jsonData = JSON.parse(jsonString);
var cache = CacheService.getScriptCache();
cache.put('jsonString', jsonString, 1500); // cache for 25 minutes
}
catch(e){
setLog("***Exception occured = "+JSON.stringify(e) + " ***");
}
}
// When you use jsonData, please JSON.parse() like this function.
function myFunction() {
var cache = CacheService.getScriptCache();
var jsonString = cache.get('jsonString');
var jsonData = JSON.parse(jsonString);
// do something
}
模式3
这是一个解决方案,即使运行的脚本已经完成并再次运行,也可以使用jsonData
。在本例中,它使用物业事务处。当使用Properties Service时,该值必须是字符串数据,并且没有时间限制。
function doPost(e){
try{
var jsonString = e.postData.getDataAsString();
setLog("***json String = " + jsonString + " ***");
// jsonData = JSON.parse(jsonString);
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('jsonString', jsonString); // Save jsonString to the property.
}
catch(e){
setLog("***Exception occured = "+JSON.stringify(e) + " ***");
}
}
// When you use jsonData, please JSON.parse() like this function.
function myFunction() {
var scriptProperties = PropertiesService.getScriptProperties();
var jsonString = scriptProperties.getProperty('jsonString');
var jsonData = JSON.parse(jsonString);
// do something
}
如果我误解了你的处境,我很抱歉。
https://stackoverflow.com/questions/49920041
复制