2012-06-14 65 views
1

通過javascript對象我有一個JavaScript變量,它看起來像:如何從servlet的

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調用中什麼是dataType,什麼是servlet中的響應內容類型。 或者如果還有其他方法可以做,請幫助。 感謝

+0

你打算如何在另一邊使用它?我發現它不是有效的JSON,因爲'colors [N]',但是如果你不能用Javascript解析它,你會如何使用它? – sberry

+0

我在想和sberry一樣的東西。 –

回答

1

由於您的數據引用了其他對象(colors),因此使其與JSON不兼容,爲何不使用eval

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

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

... 
+0

感謝西蒙它的工作原理,但同時看一個互聯網的人都說,eval函數已被棄用,應該避免它的使用可以請告訴我,使用這個函數可能是什麼問題。 –

+0

'eval'作爲'Ob​​ject'的一種方法已被棄用,但它仍然可以在上面的表格中使用,所以在那裏沒有問題。 eval的_risk_是它可能是一個安全問題,因爲你正在執行任意代碼 - 如果有人劫持了你的ajax響應,他們可以將代碼注入到你的頁面中。你可能會更安全地用'colorIndex = 0'替換'color = colors [0]',因爲你可以使用JSON。 colorIndex可以在客戶端使用'color []'數組進行重新處理。 –

+0

感謝您的回答西蒙。 –

3

Servlet的一面,寫文到text/plain的響應:

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

使用jQuery的阿賈克斯獲得它:

$.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."); 
      } 
     }); 
0

在服務器端,您可以創建豆類(或稱爲DTO對象)的屬性,並設置它的值,同時發送回作爲JSON的返回類型。它將解析爲json字符串並將其發送回客戶端,在那裏您可以使用parseJSON來更改從json字符串到json對象。