javascript - 带有 javascript 图表的 asp-classic
问题描述
考虑以下 JS 图表(取自免费的引导程序入门模板)
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
var ctx = document.getElementById("myAreaChart");
var myLineChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Mar 1", "Mar 2", "Mar 3", "Mar 4", "Mar 5", "Mar 6", "Mar 7", "Mar 8", "Mar 9", "Mar 10", "Mar 11", "Mar 12", "Mar 13"],
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: [10000, 30162, 26263, 18394, 18287, 28682, 31274, 33259, 25849, 24159, 32651, 31984, 38451],
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});
我想要做的是将一个 asp 变量传递给这个图表,我天真地认为我可以建立一个 sql-server 连接,如下所示:
<%
'--------------------------------------------------------------------------------------------
' Declare variables
'--------------------------------------------------------------------------------------------
Dim gobjConn
Dim gsConnect
Dim gsSQL
'--------------------------------------------------------------------------------------------
' Open database connection
'--------------------------------------------------------------------------------------------
gsConnect = "Driver={SQL Server};Server ;Database=mydB;Uid=UserName;Pwd=myPW;"
Set gobjConn = Server.CreateObject("ADODB.Connection")
gobjConn.Open gsConnect
gsSQL = "SELECT Sales, Week from Sales"
%>
我可以将 Store & sales 传递给上述数据标签(分别为 x 和 y 轴),但在我的 JS 文件中添加任何 asp 会导致页面不加载图表。
任何建议都会很棒。
很高兴走另一条路,这更多是为了学习(仅限于我工作地点的asp-classic)
解决方案
在 JS 文件中执行 ASP 代码是不可能的,除非您为 .js 文件添加自定义处理程序映射,以便它们像 .asp 文件一样工作。您可以做的是在您的父 asp 页面中生成数据并将值分配为全局 javascript 变量,这些变量可以由您的外部图表 JS 文件读取。
未经测试,但类似这样:
<%
'--------------------------------------------------------------------------------------------
' Declare variables
'--------------------------------------------------------------------------------------------
Dim gobjConn
Dim gobjRS
Dim gsConnect
Dim gsSQL
Dim gsData
Dim gsLoop
Dim chartLabels
Dim chartSales
'--------------------------------------------------------------------------------------------
' Open database connection
'--------------------------------------------------------------------------------------------
gsConnect = "Driver={SQL Server};Server ;Database=mydB;Uid=hal03df;Pwd=myPW;"
Set gobjConn = Server.CreateObject("ADODB.Connection")
Set gobjRS = Server.CreateObject("ADODB.Recordset")
gobjConn.Open(gsConnect)
gobjRS.open "SELECT Sales, Week FROM Sales ORDER BY Week ASC",gobjConn
' check the recordset contains data
if NOT gobjRS.EOF then
' convert the recordset to a 2d array
gsData = gobjRS.getRows()
' loop through the recordset array
for gsLoop = 0 to uBound(gsData,2)
' convert the week value to a date variable
gsData(1,gsLoop) = cDate(gsData(1,gsLoop))
' build the chart labels
chartLabels = chartLabels & """" &_
MonthName(Month(gsData(1,gsLoop)),True) & " " & Day(gsData(1,gsLoop)) & """"
' build the sales labels
chartSales = chartSales & gsData(0,gsLoop)
' add a trailing comma?
if NOT gsLoop = uBound(gsData,2) then
chartLabels = chartLabels & ", "
chartSales = chartSales & ", "
end if
next
else
' No sales data
end if
gobjRS.close
gobjConn.close
set gobjRS = nothing
set gobjConn = nothing
%><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script language="javascript">
// assign the asp chartLabels/chartSales variables as global javascript arrays
var chartLabels = [<%=chartLabels%>];
var chartSales = [<%=chartSales%>];
</script>
<script language="javascript" src="path/to/charts/js/file"></script>
</body>
</html>
一个轻微的替代方法是在您的 SQL 中执行组 concat,这将消除循环遍历记录集的需要。虽然我对 SQL Server 的了解不是很好,所以我不知道如何临时做到这一点。
在您的图表 JS 文件中:
<script language="javascript">
// Set new default font family and font color to mimic Bootstrap's default styling
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
Chart.defaults.global.defaultFontColor = '#292b2c';
// Area Chart Example
var ctx = document.getElementById("myAreaChart");
var myLineChart = new Chart(ctx, {
type: 'line',
data: {
labels: chartLabels,
datasets: [{
label: "Sessions",
lineTension: 0.3,
backgroundColor: "rgba(2,117,216,0.2)",
borderColor: "rgba(2,117,216,1)",
pointRadius: 5,
pointBackgroundColor: "rgba(2,117,216,1)",
pointBorderColor: "rgba(255,255,255,0.8)",
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(2,117,216,1)",
pointHitRadius: 50,
pointBorderWidth: 2,
data: chartSales
}],
},
options: {
scales: {
xAxes: [{
time: {
unit: 'date'
},
gridLines: {
display: false
},
ticks: {
maxTicksLimit: 7
}
}],
yAxes: [{
ticks: {
min: 0,
max: 40000,
maxTicksLimit: 5
},
gridLines: {
color: "rgba(0, 0, 0, .125)",
}
}],
},
legend: {
display: false
}
}
});
</script>
推荐阅读
- c# - 实现fire and forget异步方法调用的正确方法
- sql-server - SQL Server:如何在一定时间间隔后自动更新表中的数据
- javascript - 从特定的动态值启动 javascript 秒表
- android - Android 使用 NotificationListenerService 执行通知操作
- asp.net-mvc - 找不到路径“”的控制器或未实现 IController。错误
- python - import QCustomPlot2 ImportError: DLL load failed: 找不到指定的过程
- python - django:在添加新照片时删除以前的照片
- javascript - 在 Django 中使用 Javascript 中的模板标签
- html - 可以在过渡反转时禁用/更改 CSS 的过渡延迟吗?
- .net-core - F# 项目中有关服务器 GC 的警告