-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"我的画布上。我可以想象这是因为它在服务器上查找名为“canvas”的 ID 而不是我的客户端 DOM,我是否正确假设?

是否可以混合客户端 JavaScript 和服务器端 JavaScript?如何让我的 JavaScript 查看客户端 COM 上的画布?

4

1 回答 1

1

您需要将主脚本包装在onload类型处理程序中,因此它只会在 dom 加载/解析后运行。一种快速/肮脏的方法是

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

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

如果你使用 jquery,你会得到一个更可靠的

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

至于混合客户端/服务器端代码,这实际上是不可能的,因为它们在完全不同的环境中执行。客户端JS代码不能直接调用服务器端代码,服务器端代码也不能调用客户端代码,因为JS调用不能通过HTTP层。您可以使用 ajax 调用来间接调用事物,但是您仍然使用 HTTP。

于 2014-05-05T14:10:31.713 回答