2

次のようなJavaScript変数があります。

data = [{
                y: 55.11,
                color: colors[0],
                drilldown: {
                    name: 'MSIE versions',
                    categories: ['MSIE 6.0', 'MSIE 7.0', 'MSIE 8.0', 'MSIE 9.0'],
                    data: [10.85, 7.35, 33.06, 2.81],
                    color: colors[0]
                }
            }, {
                y: 21.63,
                color: colors[1],
                drilldown: {
                    name: 'Firefox versions',
                    categories: ['Firefox 2.0', 'Firefox 3.0', 'Firefox 3.5', 'Firefox 3.6', 'Firefox 4.0'],
                    data: [0.20, 0.83, 1.58, 13.12, 5.43],
                    color: colors[1]
                }
            }, {
                y: 11.94,
                color: colors[2],
                drilldown: {
                    name: 'Chrome versions',
                    categories: ['Chrome 5.0', 'Chrome 6.0', 'Chrome 7.0', 'Chrome 8.0', 'Chrome 9.0',
                        'Chrome 10.0', 'Chrome 11.0', 'Chrome 12.0'],
                    data: [0.12, 0.19, 0.12, 0.36, 0.32, 9.91, 0.50, 0.22],
                    color: colors[2]
                }
            }, {
                y: 7.15,
                color: colors[3],
                drilldown: {
                    name: 'Safari versions',
                    categories: ['Safari 5.0', 'Safari 4.0', 'Safari Win 5.0', 'Safari 4.1', 'Safari/Maxthon',
                        'Safari 3.1', 'Safari 4.1'],
                    data: [4.55, 1.42, 0.23, 0.21, 0.20, 0.19, 0.14],
                    color: colors[3]
                }
            }, {
                y: 2.14,
                color: colors[4],
                drilldown: {
                    name: 'Opera versions',
                    categories: ['Opera 9.x', 'Opera 10.x', 'Opera 11.x'],
                    data: [ 0.12, 0.37, 1.65],
                    color: colors[4]
                }
            }];

サーブレットからこの値を通常の応答タイプとして渡すときに、データベースのデータに従ってこの変数をサーブレットから作成したいの(response.setContentType("text/html;charset=UTF-8");)ですが、処理できません。この変数が有効なjsonオブジェクトではないことがわかったとしても、JSON.parseを使用できません。

ajax呼び出しでこの変数を取得する方法を教えてください。ajax呼び出しではdataTypeになり、サーブレットでは応答コンテンツタイプになります。もしくは他にいい方法があれば教えてください。ありがとう

4

3 に答える 3

3

サーブレット側で、テキストを text/plain レスポンスに書き込みます。

response.getOutputStream().write(myKindaJsonString.getBytes());

jquery の ajax を使用して取得します。

$.ajax({ 
           url: CONTEXT_PATH + '/YourServlet',  
           processData: false, 
           type: "GET",               
           success: function(response) {
            // your string is response now
           },
           error: function(response) { 
              alert("There was an error while trying to get value.");
           } 
        });
于 2012-06-14T05:53:17.940 に答える
1

あなたのデータは他のオブジェクト ( colors) を参照しているため、JSON と互換性がありませんeval

var colors = [1,2,3,4,5,6,7,8];

var data;
eval("data = [{...}]");

...
于 2012-06-15T05:47:26.560 に答える
0

サーバー側では、プロパティを使用して Bean クラス (または DTO オブジェクトとして呼び出される) を作成し、それに値を設定して、戻り値の型を JSON として変更して送り返すことができます。json 文字列に解析し、クライアントに送り返します。そこで、parseJSON を使用して json 文字列から json オブジェクトに変更できます。

于 2012-06-14T10:13:43.260 に答える