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

我希望这个变量根据我的数据库中的数据从 servlet 创建,当我从 servlet 作为正常响应类型传递这个值时,(response.setContentType("text/html;charset=UTF-8");)我无法处理它。即使你看到这个变量它不是一个有效的 json 对象,所以我不能使用 JSON.parse。

请指导我如何通过 ajax 调用获取此变量,ajax 调用中的数据类型是什么,servlet 中的响应内容类型是什么。或者,如果有其他方法可以做到这一点,请提供帮助。谢谢

4

3 回答 3

3

在 servlet 端,将文本写入 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 回答