Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Google脚本检索数据_Javascript_Jquery_Google Apps Script_Google Sheets_Jqvmap - Fatal编程技术网

Javascript 从Google脚本检索数据

Javascript 从Google脚本检索数据,javascript,jquery,google-apps-script,google-sheets,jqvmap,Javascript,Jquery,Google Apps Script,Google Sheets,Jqvmap,我写了一个自定义的Google脚本,它为我输出一个对象,我希望能够调用它并将其分配给一个变量,然后用于在网站上显示数据 目前,我已经找到了使用另一个Google脚本项目访问数据的方法,但是我找不到在我的计算机或DreamHost服务器上使用JS文件这样的方法 这就是我尝试过的: var infected_data = getData(); function getData() { var URL = 'https://script.google.com/macros/s/AKfycbzsy

我写了一个自定义的Google脚本,它为我输出一个对象,我希望能够调用它并将其分配给一个变量,然后用于在网站上显示数据

目前,我已经找到了使用另一个Google脚本项目访问数据的方法,但是我找不到在我的计算机或DreamHost服务器上使用JS文件这样的方法

这就是我尝试过的:

var infected_data = getData();

function getData() {
  var URL = 'https://script.google.com/macros/s/AKfycbzsyQNJwDvQc5SvNGEDZZOoNI3XxNar9PA9sRucZx7mgzfWpFQ/exec';

  var response = UrlFetchApp.fetch(URL);

 return response;
}
在类似playcode.io的情况下,它会给我以下错误:

错误:未捕获引用错误:未定义UrlFetchApp

我把它放在我的电脑上,然后用Chrome在那里运行,就得到了同样的结果:

似乎
UrlFetchApp
仅适用于谷歌脚本。是否有其他方法可以访问Google环境之外的输出

*我不知道授权和所有这些在这里是如何适应的(因为谷歌脚本似乎是以我的用户身份运行的,对吧?)

HTML标题:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>JQVMap - World Map</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <link href="../dist/jqvmap.css" media="screen" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="../dist/jquery.vmap.js"></script>
    <script type="text/javascript" src="../dist/maps/jquery.vmap.world.js" charset="utf-8"></script>
    <script type="text/javascript" src="js/jquery.vmap.sampledata.deaths.js"></script>
    <script type="text/javascript" src="js/jquery.vmap.sampledata.infected.js"></script>
    <script>
        jQuery(document).ready(function () {
            jQuery('#vmap').vectorMap({
                map: 'world_en',
                backgroundColor: '#333333',
                color: '#ffffff',
                hoverOpacity: 0.8,
                selectedColor: '#3498DB',
                enableZoom: true,
                showTooltip: true,
                scaleColors: ['#F3A291', '#FF4F3B'],
                values: infected_data,
                normalizeFunction: 'polynomial',
                onLabelShow: function (event, label, code) {
                    label.html('<div class="map-tooltip"><h1 class="header"> ' + label.html() + '</h1><p class="description">Infected: ' + infected_data[code] + '</p><p class="description">Deaths: ' + death_data[code] + '</p></div>');
                }
            });
        });
    </script>
</head>
function doGet() {
    var result = {};
    var infected = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();
    var death = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();
    result = makeObject(infected);

    return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}

function makeObject(multiArr) {
    var obj = {};
    var countrystats = {};
    var headers = multiArr.shift();

    for (var i = 0; i < headers.length; i++) {
        countrystats[i] = multiArr.map(function (app) {
            return app[i];
        })
    }

    for (var m = 0; m < countrystats[1].length; m++) {
        obj[countrystats[1][m]] = 0;
    }

    for (var j = 0; j < countrystats[1].length; j++) {
        var TempVar;
        TempVar = obj[countrystats[1][j]];
        obj[countrystats[1][j]] = TempVar + countrystats[3][j];

    }

    return obj;
}

这是一个带有我想要的对象/数据的公共链接(与上面显示的对象相同):web app:

所以基本上任何使用它的人都应该能够访问它。我只需要一种方法将该数据分配给一个局部JS变量。GoogleSheets脚本作为web应用程序发布。如果我没有弄错的话,有一个允许任何人,甚至是匿名者访问它的设置

下面是我对AJAX请求的尝试: var url=“”

如果我取消对jsonp的注释,我会得到一个错误:

jquery-1.11.3.min.js:5跨源读取阻塞(CORB)使用MIME类型application/json阻塞跨源响应。有关更多详细信息,请参阅


如果我删除它,我不会得到任何错误。但是,我仍然看不到我的交互式地图(我的应用程序)上的数据。

如果您试图从Google Apps脚本的外部的Google电子表格中获取数据,例如在您自己的网站/服务器上,您将需要使用

下面是一篇关于如何使用JavaScript进行Google API调用的好文章:。

const url=“将您的Google WEB应用程序url放在此处”


感谢您的有益见解。现在我的桌面上有一堆网站文件。HTML文件的头文件中有一个脚本,该脚本调用java脚本文件,其中只有一个对象与变量对齐。(Var TestObject={Item1,Item2,Item3,Item4..}。google脚本返回该对象。因此,如果提供了更多信息,我只需要将该对象从google scrips本地获取到我的java脚本变量。如果有任何变化,这些文件将上载到要托管的dream主机服务器。我将查看get请求。同时,如果您有任何其他信息,则太好了。谢谢!:)问题更新。我正在使用jqvmap。(GitHub可以在这里找到:)受感染的_数据对象(这是我的google脚本生成的)存储在这个JS文件中:“JS/jquery.vmap.sampledata.infected.JS”。与“js/jquery.vmap.sampledata.death.js”文件中的death_数据类似,请将JSON和其他基于文本的输出显示为文本,而不是文本图像。而且,没有必要把“更新:”放在所有事情的前面;如果我们想知道新的内容,我们可以查看对该问题所做编辑的全部历史记录。很酷,谢谢提示。这里仍然有很多悬念。:)这对我来说似乎相当复杂。有没有更简单的方法将google脚本的输出分配给一个变量?所以我一直在摆弄google API,它看起来很混乱。我编写的谷歌应用程序脚本与谷歌工作表文件紧密相连(这是它获取数据的地方)。如果我要使用GoogleScriptsAPI,那么我需要将其作为一个标准项目,这似乎会取消与sheets文档的链接。也许你能澄清一些事情,给我指出正确的方向。谢谢你的帮助,我会继续调查直到找到另一个解决方案。访问应用程序脚本应该很简单,我不需要授权,这使得它太笨重。这是一个带有我想要的对象/数据的公共链接:所以基本上任何使用它的人都应该能够访问它。我只需要一种方法将该数据分配给一个局部JS变量。GoogleSheets脚本以web应用程序的形式发布。当你说“将数据分配给本地JS变量”是什么意思?在这种情况下,“本地”是什么?听起来您只是想使用JavaScript发出AJAX web请求?因此,您已经有了一个GAS web应用程序,它将返回您的工作表数据的JSON。现在,您只需要从本地服务器使用AJAX来调用web应用程序URL,并将AJAX调用返回保存到JS对象。
{
cn: 8134,
th: 23,
mo: 7,
us: 5,
jp: 11,
kr: 4,
sg: 10,
vn: 2,
fr: 5,
np: 1,
my: 8,
ca: 3,
ci: 1,
lk: 1,
au: 9,
de: 4,
fn: 1
}
  var infected_data = jQuery.ajax({
    crossDomain: true,
    url: url,
    method: "GET",
    //dataType: "jsonp"
  });
// Declare an async function
  const getData = async () => {
  // Use the await keyword to let JS know this variable has some latency so it should wait for it to be filled 
  // When the variable is fetched, use the .then() callback to carry on 
    const DataJSON = await fetch(url).then(response => 
      response.json()
    )

    return await DataJSON
  };