0

別の JavaScript からの入力に基づいて char をロードする必要がある場合があります。しかし、私の場合はうまくいきません。以下のコードを追加しました。

 <script type="text/javascript">
    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', {'packages':['corechart', 'table']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() {
      var json = $.ajax({
        url: fileURL, // make this url point to the data file
        dataType: 'json',
        cahce:false,
        async: false
      }).responseText;



      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(json);
      var options = {
        title: graphTitle,
        is3D: 'true',
        width: 800,
        height: 600
      };
      var tableOptions = {
       title: 'App Listing'
     };
      // Instantiate and draw our chart, passing in some options.

      var chart = new       google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data, options);




    }

    </script>  

次のように、graphtitle と fileURL の値を渡します。

 <script type="text/javascript">
    $(document).ready(function () {
      var fileURL = "";
      var graphTitle = "";


      function showDiv() {
        if($firstCheck) {
          var selText;
          $("#dd4 li a").show(function () {
            selText = $(this).text();
          });

          if(selText !== "Factor"){
            if(selText == "IA Architecture Usage"){
              fileURL = "get_json.php";
              graphTitle = "IA Architecture Variation";
            }else if(selText ==  "Tablet to Phone"){
              fileURL = "get_tablet_support.php";
              graphTitle = "Tablet Usage Variation";

            }
          document.getElementById('chart_div').style.display = "block";
          }
        }else{
          document.getElementById('chart_div').style.display = "none";
        }



    }

 </script>

これらの JavaScript は両方とも同じファイル内にあります。上記のコードを使用すると、fileURL と graphTitle を渡すことができません。この問題を解決する方法はありますか?

4

2 に答える 2

1

ウィンドウでグローバル変数を使用します。例えば

$(document).ready(function () {
window.fileURL = "";
window.graphTitle = "";
});

「var」を指定しないでください。関数のスコープ内にのみ含まれます。

編集:また、変数が最初に割り当てられているスクリプトが他のスクリプトの前にあることを確認してください。

于 2013-11-14T02:30:19.847 に答える
0

もう少し OO 指向のもの (実際には OO ではなく、inlineコードが少ない) はどうですか? よりクリーンで、読みやすく、維持しやすくなっています..例はまだいくつかの作業を使用する可能性がありますが、あなたはその考えを理解できると確信しています.

function loadChart(title, url) {
    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', {'packages':['corechart', 'table']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() {
      var json = $.ajax({
        url     : url, // make this url point to the data file
        dataType: 'json',
        cahce   : false,
        async   : false
      });



      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(json);
      var options = {
        title : title,
        is3D  : 'true',
        width : 800,
        height: 600
      };

      var tableOptions = {
       title: 'App Listing'
     };
      // Instantiate and draw our chart, passing in some options.

      var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
}

$(document).ready(function () {
    var fileURL    = "";
    var graphTitle = "";

    function showDiv() {
        if($firstCheck) {
          var selText;

          $("#dd4 li a").show(function () {
            selText = $(this).text();
          });

          if(selText !== "Factor") {
            if(selText == "IA Architecture Usage"){
              fileURL    = "get_json.php";
              graphTitle = "IA Architecture Variation";

            } else if(selText ==  "Tablet to Phone"){
              fileURL    = "get_tablet_support.php";
              graphTitle = "Tablet Usage Variation";
            }

            document.getElementById('chart_div').style.display = "block";
          }

        } else {
          document.getElementById('chart_div').style.display = "none";
        }

        loadChart(graphTitle, fileURL);
    }
}

ところで、コードにエラーがあると思います。.responseText私にはかなり役に立たないようで、おそらくそれ自体でエラーがスローされます。showDiv()また、誰がコードを呼び出しているのかわかりません。例から、決して発火しないと思います。

于 2013-11-14T02:46:38.807 に答える