1

我已经在各种星座中测试了这段代码,只有一个星座给了我一个我无法追踪的错误。也许其他有更多谷歌可视化经验的人可以看到这个问题。在这种情况下,获取 json 响应,然后我得到一个令牌错误,在错误消息中没有标识任何令牌,并且“错误暂停”不会在我的 js 或外部 js 中的任何地方暂停。然后,30 秒后。我的回调确实被调用了,但错误设置为超时(查询错误)。

这是您也可以在没有 SSL 的情况下测试的 URL

https://cio-services.eu/demoOe2/Api/Insight/GetESiteEuoChart/?viewFlag=1&eSiteKid=4b92d450-b29d-47c0-943b-00890f56caf2&periodMin=7200&keyProp=KW15

这是我的客户端 js,它适用于多种场景

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

    var chartOptions = {
        curveType: 'none',
        //width: 1200,
        height: 400, 
        vAxis: { maxValue: 10, title: 'kWh/4 (15 min)' },
        hAxis: { title: 'Time' },
        title: 'Live production log',
        titlePosition: 'out',
        titleTextStyle: { fontSize: 14, textIndent: 10 },
        fontSize: 12
    };

    google.load("visualization", "1", { packages: ["corechart"] });
    google.setOnLoadCallback(drawChart);
    var _chart;

    function drawChart() {

        //GET GChart data           
        var query = new google.visualization.Query('https://cio-services.eu/demoOe2/Api/Insight/GetESiteEuoChart/?viewFlag=1&eSiteKid=4b92d450-b29d-47c0-943b-00890f56caf2&periodMin=7200&keyProp=KW15');

        //set query parameters
        //query.setQuery('select 1, 2');

        query.send(drawTable);
    }

    function drawTable(response) {
        //error checking
        if (response.isError()) {
            alert('Error in query: ' + response.getMessage() + '' + response.getDetailedMessage());
            return;
        }

        //convert response to JSON string
        var googleDataQuery = response.getDataTable().toJSON();

        //Convert JSON to google Data table
        var convertedData = new google.visualization.DataTable(googleDataQuery, 0.5);

        //Initialize a specific data table sub set view and store into a variable  
        var view = new google.visualization.DataView(convertedData);

        _chart.draw(view, chartOptions);
    }

    $(function () {     
        _chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    });

</script>
4

1 回答 1

0

好的,这里发生了一些神奇的事情,需要仔细阅读文档才能理解。

https://developers.google.com/chart/interactive/docs/dev/implementing_data_source JSON 响应格式

如果请求包含“X-DataSource-Auth”标头,则默认响应格式为 JSON,否则为 JSONP。请注意,Google 图表客户端实际上支持 JSON 和 JSONP 的修改版本;如果您使用的是 Java 或 Python 帮助程序库,它们会为您提供正确的代码;如果您手动解析响应,请参阅下面的 JSON 修改

会发生什么:

如果您提供的目标域与主域有任何不同(甚至是不同的端口),则 google-visualization 决定删除“X-DataSource-Auth”标头属性,从而触发客户端期望 jsonP 而不是 json . 显然,在这些情况下 RequestID 也始终为零。无论如何,这意味着您不能简单地将 API 用于 CORS 和非 CORS 访问。

只需看一下发出的http请求标头即可。如果 Host: 和 Referer: 属性有任何不同,那么您不会返回纯 json,而是返回如下内容:

string returnVal = "google.visualization.Query.setResponse(" + my-valid-pure-json + ")";

此处的详细信息:https ://developers.google.com/chart/interactive/docs/dev/implementing_data_source?hl=en

GG

于 2013-06-22T19:48:46.853 回答