-1

サーバーサイド JavaScript を使用してデータを操作しています。例えば:

<script runat="server">
        var subscriberScoringHistoryDE = DataExtension.Init("de_name");
        var rows = subscriberScoringHistoryDE.Rows.Retrieve();
        for (var i = 0; i < 5; i++)
        {

        }
</script>

上記は、サーバー上の JS API にアクセスしているため実行されます。とにかく、上記は正常に実行されます。私が抱えている問題は、上記と組み合わせて以下のようなものがある場合です。

<script>
        var barChartData = {

            // labels will be the dates
            labels : ["January","February","March","April","May","June","July"],
            datasets : [
                {
                    fillColor : "rgba(220,220,220,0.5)",
                    strokeColor : "rgba(220,220,220,1)",

                    // data will be the count
                    data : [65,59,90,81,56,55,40]
                },  
            ]
        }

    var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Bar(barChartData);

    </script>

<body>
    <canvas id="canvas" height="450" width="600"></canvas>
</body>

JS コードは、「キャンバス」と呼ばれるものを認識しません。runat="server"キャンバスにも貼ってみました。これは、クライアント側のDOMではなく、サーバーで「キャンバス」と呼ばれるIDを探しているためだと想像できますが、これは正しいと思いますか?

クライアント側 JavaScript とサーバー側 JavaScript を混在させることはできますか? クライアント COM にあるキャンバスを JavaScript に表示させるにはどうすればよいですか?

4

1 に答える 1

1

メイン スクリプトをタイプ ハンドラーでラップする必要があるonloadため、dom がロード/解析された後にのみ実行されます。それを行うための1つの簡単な/ダーティな方法は

<script>
   function foo() {
      // your var barchartdata etc... goes here
   }
</script>

<body onload="foo();">
....
</body>

jquery を使用していた場合は、多少信頼性が高くなります。

$(document).ready(function() {
   /// var barchartdata stuff goes here
});

クライアント側とサーバー側のコードを混在させることに関しては、まったく異なる環境で実行されるため、実際には不可能です。JS 呼び出しは HTTP レイヤーを通過できないため、クライアント側の JS コードはサーバー側のコードを直接呼び出すことができず、サーバー側のコードはクライアント側のコードを呼び出すことができません。ajax 呼び出しを使用して間接的に呼び出すことはできますが、それでも HTTP を使用しています。

于 2014-05-05T14:10:31.713 に答える