Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 如何将变量用作js代码?_Javascript_Jquery_Highcharts - Fatal编程技术网

Javascript 如何将变量用作js代码?

Javascript 如何将变量用作js代码?,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我试图使用jQuery(或highcharts)将数据添加到下面的函数中。问题是如何在不使用eval的情况下将数据嵌入到javascript代码中,因为我必须将所有代码都写成字符串 function pie(data) { $(function () { $('#renderingdiv').highcharts({ chart: { plotBackgroundColor: null, plotBorderWidth:

我试图使用jQuery(或highcharts)将数据添加到下面的函数中。问题是如何在不使用eval的情况下将数据嵌入到javascript代码中,因为我必须将所有代码都写成字符串

function pie(data)
{
  $(function () {
    $('#renderingdiv').highcharts({
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'Browser market shares at a specific website, 2010'
        },
        tooltip: {
            pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    format: '<b>{point.name}</b>: {point.percentage:.1f} %'
                }
            }
        },
        series: [**data**]
    });
});
};

有什么想法吗?

这个快速而肮脏的函数将您的数据转换为有效的JSON并返回一个对象

function parseData(data) {    
    data = data
        // remove \+line endings
        .replace(/\[\n\r]+/g, '') 
        // insert double quotes for keys
        .replace(/([\[{,])\s*(\w+)([,:])/g, '$1"$2"$3') 
        // replace values single quotes with double
        .replace(/(:)\s*'(\w+)\s*'/g, '$1"$2"'); 
    return JSON.parse(data);
}
当然,您应该对此进行改进,以处理转角情况

演示:(导致控制台输出)

但这只是一个解决办法。真正的解决方案是更改服务器输出以返回有效的JSON

结果(JSON编码):

{“类型”:“pie”,“名称”:“状态”,“数据”:[[“WSCH”,377],“WMATL”,4],“WAPPR”,349],“NCOMP”,3],“INPRG”,56],“COMP”,18],“CLOSE”,697],“APPR”,420]}


有什么框架支持它吗?有什么理由不想使用eval()吗?只是出于好奇问一下数据应该是字符串吗?然后使用
JSON.parse
而不是
eval
。如果不是,那么这些反斜杠在那里做什么?你一开始是怎么把它们弄到那里的?删除它们,您可以将标记用作JS对象文字。@john:是的,特殊框架。一般来说,问题是如何在不使用eval的情况下在代码中嵌入变量?@Raghu:eval并不可取,因为数据可能包含一些字符,而且需要大量编码才能使用\。是的,但我的问题不是转换为JSON。我需要上面显示的其他格式的数据。我想要一种机制,将数据字符串变量(可能包含一些js代码)添加到函数中,就像它是pie函数代码的一部分一样
function parseData(data) {    
    data = data
        // remove \+line endings
        .replace(/\[\n\r]+/g, '') 
        // insert double quotes for keys
        .replace(/([\[{,])\s*(\w+)([,:])/g, '$1"$2"$3') 
        // replace values single quotes with double
        .replace(/(:)\s*'(\w+)\s*'/g, '$1"$2"'); 
    return JSON.parse(data);
}