Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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 将ajax字符串数据转换为数组以更新绘图数据_Javascript_Ajax_Playframework_Jqplot - Fatal编程技术网

Javascript 将ajax字符串数据转换为数组以更新绘图数据

Javascript 将ajax字符串数据转换为数组以更新绘图数据,javascript,ajax,playframework,jqplot,Javascript,Ajax,Playframework,Jqplot,我正在尝试使用Ajax请求动态更新jqplot图表。 我的服务器正在返回数据的字符串表示形式,如下所示: “[['果汁',30],'牛奶',30],'水',30]” 但是,我需要将这个字符串转换为数组数组。 这是更新数据的正确方法吗?如果是,转换字符串的最佳方法是什么 $.ajax({ url:'http://localhost', success:function(plotData){ var data = plotData.split(",")

我正在尝试使用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]]”

转换字符串时,u可能会使用此函数

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) );
var plotData=“[['Juice',30],'Milk',30],'Water',30]”;
功能strtarr(str){
//检查“[”,“]”的模式
var patt=/[\[\]]/gi;
//我们将模式替换为“”符号
var tmp=str.replace(patt,,).split(,);
var结果=[]
对于(变量i=0;i
您可以使用
eval(“var x=“+plotData)
作为替代解决方案。数量很少,请在使用前仔细检查一下

正确格式化数据 看起来您从服务器得到的响应应该是JSON。但是,它不是有效的json,因此表示为字符串

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

[['Juice',30],['Milk',30],['Water',30]]
[["Juice",30],["Milk",30],["Water",30]]
这是有效的json:

[['Juice',30],['Milk',30],['Water',30]]
[["Juice",30],["Milk",30],["Water",30]]
唯一的区别是引号。更改响应字符串可能(取决于您在服务器端执行的操作)会立即进行更正,使
plotData
已经是一个由3个数组组成的数组

返回正确的内容类型 如果您尚未使用正确的http头提供响应—请确保响应作为
application/json
提供,这当然是对有效json字符串的补充

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

$.ajax({
    ...
    dataType: 'JSON'
    ...
});
我不记得这有多严格,在没有服务器端修改的情况下可以工作

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


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

尝试
eval(“var x=“+plotData”)
Arun,您的建议非常有效。你能提供一个答案而不是评论,这样我就可以接受了。-1建议使用eval-甚至你链接到的问题都说“甚至没有必要使用eval()解析JSON”。问题中的“ajax字符串”是一个格式错误的json响应,或者可以很容易地转换为有效的json字符串并进行适当的处理,这一点或多或少是清楚的。