将C3.js中的HTTP请求标头发送到源URL

时间:2016-06-25 08:26:11

标签: angularjs d3.js c3.js

我正在使用c3-angular.min.js。在客户端,我编写了一个拦截器,用于向发送到api服务器的每个请求添加授权头。 所有http请求似乎都有授权,而不是通过C3.js进行的授权。结果,我的图表收到401错误。没有太多文件可用。

如何在c3.js发出的请求中添加http请求标头。

 $scope.config={
            bindto: '#div1_chart',
            data: {
              'x':'x',
              'types':{'count':'area'},
              'names':{'count':'hits/day'},
              'url':$scope.base_url,
              'mimeType':'json'
            },
            axis : {
                x : {
                    type : 'timeseries',
                    tick : {
                rotate: 45,
                multiline: false,
                      fit: false,
                      format : $scope.format 
                    },
              height:100
                }
            }
        };
$scope.showGraph = function() {
    $scope.chart = c3.generate($scope.config);     
}

1 个答案:

答案 0 :(得分:2)

我刚刚浏览了C3.js库的代码并找到了一个未记录的功能,它正是这样做的。如果你想依赖它,这取决于你,但它似乎完美无缺。我检查了GitHub repository的最新代码。

您可以通过向headers对象或data函数的对象添加load对象来执行此操作。然后,headers对象的每个键/值对将被转换为XMLHttpRequest请求头。这是图书馆的相关代码:

else if (args.url) {
    $$.convertUrlToData(args.url, args.mimeType, args.headers, args.keys, function (data) {
        $$.load($$.convertDataToTargets(data), args);
    });
}

然后在convertUrlToData()内:

if (headers) {
    Object.keys(headers).forEach(function (header) {
        req.header(header, headers[header]);
    });
}

因此,在C3.js中使用标头的请求示例如下所示:

var chart = c3.generate({
    data: {
        url: '/data/c3_test.csv',
        headers: {
            "testheader": "testvalue" 
        }
    }
});