Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 谷歌可视化API多次调用权限被拒绝(IE)_Javascript_Api_Charts_Permissions_Visualization - Fatal编程技术网

Javascript 谷歌可视化API多次调用权限被拒绝(IE)

Javascript 谷歌可视化API多次调用权限被拒绝(IE),javascript,api,charts,permissions,visualization,Javascript,Api,Charts,Permissions,Visualization,我是谷歌图表API的新手,正在尝试在我们的一个页面上实现它 我拥有的是一个经过客户端过滤的数据表。我想在客户端实时地重新绘制图表。在一些问题之后,我发现(如此)如果你在页面加载后调用google.load(即,点击一些按钮),它会清除你的html,解决方案似乎是google.load('version','package',{callback:…}),强制它追加而不是注入。这里的问题是,现在回调需要是一个全局函数,否则它将无法解析该内部上下文中的任何内容(或者看起来是这样) 由于上述原因,我当前

我是谷歌图表API的新手,正在尝试在我们的一个页面上实现它

我拥有的是一个经过客户端过滤的数据表。我想在客户端实时地重新绘制图表。在一些问题之后,我发现(如此)如果你在页面加载后调用google.load(即,点击一些按钮),它会清除你的html,解决方案似乎是google.load('version','package',{callback:…}),强制它追加而不是注入。这里的问题是,现在回调需要是一个全局函数,否则它将无法解析该内部上下文中的任何内容(或者看起来是这样)

由于上述原因,我当前的设置如下:
1) 包含位于的脚本
2) 调用google.load,传入一个回调指针,指向具有绘图逻辑的my函数

现在#2是奇怪的部分,在我看到的示例中,“alert(zzz)”作为一个演示回调传入,对我来说,显然,我想绘制图表。但是图表都有不同的数据,因此每次调用函数时函数都是不同的

作为测试,我定义了一个名为“CALLBACK_PTR”的全局变量,然后将其指向一个匿名函数,该函数在用户每次单击按钮时都用新数据重新定义

这是可行的,数据被正确地显示和更新,但是如果我在IE中查看开发工具的按钮点击(即函数调用)#2+,我会看到一堆权限被拒绝的错误。有什么线索吗

JS代码如下:

var CALLBACK_PTR;

function createChart(sChartType,sContainerID,oData,oOptions)
{
CALLBACK_PTR = null;

// Load the Visualization API and the piechart package.
google.load('visualization', '1.0',{'callback':'CALLBACK_PTR()'});      


// Set a callback to run when the Google Visualization API is loaded.
//google.setOnLoadCallback(drawVisualization);


CALLBACK_PTR = function () {

    var oDataTable = new google.visualization.arrayToDataTable(
        oData
    );

    var wrapper = new google.visualization.ChartWrapper(
        {
            chartType: sChartType,
            dataTable: oDataTable,
            options:oOptions,
            containerId:sContainerID
        }
    );

    wrapper.draw();


    //interactivity, will build on this in the future
    google.visualization.events.addListener(wrapper,'ready',function(){
        var chart=wrapper.getChart();
        google.visualization.events.addListener(chart, 'select',function(){         
                        var selectedItem = chart.getSelection()[0];
                        if (selectedItem) {
                            var value = oDataTable.getValue(selectedItem.row, selectedItem.column);
                            alert('Value:' + value);
                        }
                    })//end inner anon function         
    });

    } // end draw function

}//end createChart
这一切都有点奇怪,但它确实起作用了,除了拒绝许可的事情。每当他们单击按钮(过滤可见数据)时,就会通过createChart(…)从客户端页面调用此函数

您将在JS调试器中看到的错误:

SCRIPT70: Permission denied 
format+en,default+en.I.js, line 83 character 16
单击它会让我看到谷歌的模糊代码:

if(1==a[ed])
如果我将鼠标悬停在“a”上,所有属性(id、name等)都会在“value”下表示权限被拒绝

如有任何意见,将不胜感激

另外,在定义回调函数后调用google.load是否有意义?无论您使用callback:{}还是setOnLoadCallback,为什么不先定义回调?特别是在我的情况下,它的变化

请随意评论由于使用包装器而不得不编写的交互性代码,因为包装器准备就绪之前wrapper.getChart不起作用,所以我必须将图表侦听器包装在包装器“就绪”侦听器中

编辑

我试图将其简化为:

function createChart(sChartType,sContainerID,oData,oOptions)
{
if(CHART){
    //clear the old chart --TODO:, what if they want to generate multiple charts??
    CHART.clearChart();
}

CALLBACK_PTR = null;
CALLBACK_PTR = function () {

    var oDataTable = new google.visualization.arrayToDataTable(
        oData
    );

    CHART = new google.visualization.LineChart(document.getElementById(sContainerID)).
      draw(oDataTable, oOptions);

    } // end draw function


    // Load the Visualization API and the piechart package.
    google.load('visualization', '1.0',{'packages':['corechart'],'callback':'CALLBACK_PTR()'});
}//end function createChart
但仍然并没有运气。即使清除了一些其他帖子中建议的图表引用,仍然会被拒绝

另一次编辑 上面的代码不正确,行:

CHART = new google.visualization.LineChart(document.getElementById(sContainerID)).
  draw(oDataTable, oOptions);
应该是:

CHART = new google.visualization.LineChart(document.getElementById(sContainerID));
    CHART.draw(oDataTable, oOptions);
否则“图表”就是什么。draw返回,意思是我的.clearChart不工作


既然这样,有没有“clearWrapper”的等价物?因为我的原始代码使用了包装器,所以调用者可以传入图表类型,而不必担心维护不同的对象。

好的,下面是发生的事情

clearChart()确实解决了这个问题-我确认了这一点。问题是我没有正确设置图表引用,因为在我的第一个示例中,我在调用.draw之后定义了包装器就绪事件,这太晚了,您需要在调用draw之前定义就绪事件侦听器

一旦我解决了这个问题,clearChart被正确调用,错误就停止了