1

PHP などのサーバー側テクノロジを使用して Highcharts JSON を生成しています。

ブラウザから AJAX リクエストを送信して、完全な Highcharts JSON を取得し、レンダリングしています。

たとえば、MY 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 は "Invalid JSON or Parse Error" としてエラーをスローします

  3. これは適切なプログラミング手法ではないため、eval() の使用は許可されていません。

JSONオブジェクトを反復処理し、文字列を関数に変換して自動的に呼び出されるようにする方法はありますか?

4

3 に答える 3

1

あなたがやりたいことはeval()、それを使うことです。サーバーから送信された未知のコードを実行したい。どのようなアプローチを試みても、最終的には同じeval()ことを行います。

送信したコードに問題がないと確信できる場合は、使用しても害はありません。

于 2013-03-26T09:57:37.300 に答える
0

JSON では関数定義を追加することはできませんが、https: //groups.google.com/forum/? fromgroups=#!topic/json-schema/7f5Wd5yRluo を参照してください。

于 2013-03-26T13:22:33.067 に答える
0

eval()それが本当に唯一の方法です。

なぜ使用を許可しないのですか?描かれているほど悪くはなく、この場合は問題ありません。回避策を使用すると、本質的に書き直すことになりますeval()

于 2013-03-26T09:56:47.057 に答える