1

我正在尝试使用 Ajax 请求动态更新 jqplot 图表。我的服务器正在返回数据的字符串表示,如下所示:

“[['果汁',30],['牛奶',30],['水',30]]”

但是我需要将此字符串转换为数组数组。这是更新数据的正确方法吗?如果是,那么转换字符串的最佳方法是什么。

   $.ajax({
       url:'http://localhost',
       success:function(plotData){
       var data = plotData.split(","); 
         if(plot){
             plot.series[0].data = data;
             plot.redraw();
         }
       },
       fail:function(error){
          alert('error:'+error);         
       }
   });   

此代码将转换为一维数组:

0:“[['Helpdesk'” 1:“30]” 2:“['用户'” 3:“30]” 4:“['自动生成'” 5:“30]]”

4

3 回答 3

1

为了转换一个字符串,你可能可以使用这个函数

var plotData = "[['Juice',30],['Milk',30],['Water',30]]";

function strToArr(str) {
//pattern that checks for '[', ']'
var patt=/[\[\]]/gi; 

//we replace the pattern with '' symbol
var tmp = str.replace(patt,'').split(',');

var result = []
for (var i = 0; i < tmp.length; i+=2) {
    //now all data is in one array, we have to putt in pairs
    result[i] = [ tmp[i], tmp[i+1] ]
}
return result;
}

console.log( strToArr(plotData) );
于 2013-01-21T09:44:35.900 回答
1

您可以eval("var x= " + plotData)用作替代解决方案。使用eval几乎没有什么危险 ,请在使用前仔细阅读。

于 2013-01-21T10:00:58.900 回答
0

正确格式化您的数据

看起来您从服务器获得的响应应该是 JSON。但是,它不是有效的 json,因此被表示为字符串。

所需的更改非常简单,这是无效的 json:

[['Juice',30],['Milk',30],['Water',30]]

这是有效的 json:

[["Juice",30],["Milk",30],["Water",30]]

唯一的区别是引号。更改响应字符串,可能(取决于你在服务器端做什么)立即纠正plotData已经是 3 个数组的数组。

返回正确的内容类型

如果您尚未使用正确的 http 标头提供响应 - 确保响应提供为application/json,这当然是除了提供有效的 JSON 字符串之外。

强制解释为 json

要强制 jQuery 尝试将响应解析为 json - 您可以dataType显式设置:

$.ajax({
    ...
    dataType: 'JSON'
    ...
});

我不记得在没有服务器端修改的情况下这是多么严格。

使用 JSON.parse

或者,如果您只想按原样处理字符串;你可以使用JSON.parse

input = "[['Juice',30],['Milk',30],['Water',30]]";
jsonString = input.replace(/'/g, '"'); // correct quotes as per point 1
result = JSON.parse(jsonString);

然后结果将是一个包含 3 个数组的数组。

于 2013-01-22T18:11:39.470 回答