[英]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響應中看到的那樣,我正在使用雙引號(“”)來獲取函數,
我的問題是
由於這是一個字符串,因此我無法將其作為函數調用。
如果我在PHP中刪除(“”),則jQuery Ajax會引發錯誤,例如“無效的JSON或解析錯誤”
我不允許使用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.