2013-03-26 96 views
1

我使用PHP等服務器端技術生成Highcharts JSON。Javascript字符串作爲關閉函數

從瀏覽器我發送一個AJAX請求來獲取完整的Highcharts JSON,然後呈現它。

對於如我的Ajax響應是

[ 
    { 
     "plotOptions":{ 
     "enabled":false, 
     "series":{ 
      "stacking":"", 
      "point":{ 
       "events":{ 
        "click":"function(e){console.log(e.point.config); console.log(e.point.category)}" 
       } 
      } 
     } 
     }, 
     "chart":{ 
     "type":"column", 
     "renderTo":"leftTopContainer", 
     "polar":false 
     }, 
     "series":[ 
     { 
      "name":"netpos", 
      "data":[6700,8200,11500] 
     } 
     ], 
     "title":{ 
     "text":"Future Financial Commitments-5Y Yr View" 
     }, 
     "xAxis":{ 
     "categories":["2010","2011","2012"] 
     } 
    } 
]; 

獲得服務器端的響應後,我使其使用下面的代碼

new Highcharts.Chart(responseData); 

惟獨事件工作正常

"events":{ 
    "click":"function(e){console.log(e.point.config); console.log(e.point.category)}" 
       } 

正如你可以在JSON響應,我在雙引號取得功能(」「)看到,

我的問題是

  1. 由於這是一個字符串,我不能打電話的功能。

  2. 如果我刪除(」「)在PHP隨後的jQuery的Ajax拋出一個錯誤‘無效的JSON或解析錯誤’

  3. 我不允許使用eval(),因爲這不是一個良好的編程習慣。

有沒有辦法讓我可以遍歷JSON對象並將字符串轉換爲函數以便它會自動調用。

+0

有什麼特別的原因,你不只是綁定你的JS代碼中的事件處理程序? – Alnitak 2013-03-26 09:57:01

+0

在JSON中傳遞JavaScript代碼也不是一個好的編程實踐 – 2013-03-26 10:05:32

+0

@Alnitak我們正在構建服務器端的圖表創建,並且我們已經將所有事件處理函數寫入了XML文件。我們正在從XML讀取事件數據並生成JSON。 – 2013-03-26 10:53:43

回答

0

eval()是你想要的,它是唯一的方法。

你爲什麼不被允許使用它?它並不像描繪的那樣邪惡,在這種情況下很好。如果您使用解決方法,則基本上將重新編寫eval()

+0

這不是一個答案,它應該是一個評論。 – Alnitak 2013-03-26 09:57:27

1

你想要做的是eval()所以使用它。你想執行從服務器發送的未知代碼。不管你嘗試什麼方法,最後你都會這樣做,就像eval()會做的一樣。

如果您確定,您發送的代碼沒問題,使用它沒有任何壞處。