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);         
       }
   });   

このコードは 1 次元配列に変換されます。

0: "[['Helpdesk'" 1: "30]" 2: "['Users'" 3: "30]" 4: "['Auto Generated'" 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 に答える