簡體   English   中英

Javascript字符串作為關閉函數

[英]Javascript string as closure function

我正在使用服務器端技術(如PHP)生成Highcharts JSON。

我從瀏覽器發送一個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對象並將字符串轉換為函數,以便將其自動調用。

您想要做的是eval()所以使用它。 您要執行從服務器發送的未知代碼。 無論您嘗試哪種方法,最后您所做的操作都與eval()相同。

如果您確定,您發送的代碼是可以的,則使用它不會有任何危害。

eval()是您想要的,這實際上是唯一的方法。

為什么不允許使用它? 它不像所描繪的那樣邪惡,在這種情況下很好。 如果使用解決方法,則實際上將是重寫eval()

在JSON中,您不能添加函數定義,而要查看: https : //groups.google.com/forum/? fromgroups =#!topic/json- schema/ 7f5Wd5yRluo也許會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM