营销云 SSJS - javascript 在 2 个脚本之间传递值
Marketing cloud SSJS - javascript passing values between 2 scripts
我有一个云页面。
在这个页面上,我有
- SSJS 脚本,从数据扩展中检索记录。从数据扩展中的计数列,我想创建一个像
这样的数组
数据数组 = [10,20,30,40,50]
- 然后我需要将这个数组 (dataarray) 传递给另一个我可以在 d3 中使用它的脚本。
我面临的问题是如何将值从服务器 运行 的脚本传递到客户端 运行 的脚本。我已经尝试了隐藏的 html 元素方法,该方法不起作用并且不保证脚本执行的顺序。
能否请您告知如何传递值。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="https://www.abc.nl/favicon.ico">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
</head>
<body>
<script runat="Server">
Platform.Load("core","1.1.5");
var data_rec;
try
{
var myDE = DataExtension.Init('01_Reporting_Sent_Today');
var filter = {Property:'return',SimpleOperator:'equals',Value:'1'};
var data = myDE.Rows.Retrieve(filter);
data_rec = data.length;
Write("<br/>The len is :" + Stringify(data_rec))
}catch(ex)
{
Write("<br/>The error is :" + Stringify(ex))
}
</script>
<script>
var datachart = [10,20,30,40,50];
var canvas = d3.select("body")
.append("svg")
.attr("width",500)
.attr("height",500)
var bars = canvas.selectAll("rect")
.data(datachart)
.enter()
.append("rect")
.attr("width",function (d) { return d;})
.attr("height",50);
</script>
</body>
</html>
所以第一个脚本中的数据数组,我需要在第二个脚本中使用
您可以使用 AMPScript 来 return JS 脚本中的值:
更新:修复了 Reidenshi
指出的示例中的错误语法
<script runat="server">
...
var dataString = Stringify(data);
Variable.SetValue("@dataString", dataString);
</script>
<script>
var data = JSON.parse(%%=v(@dataString)=%%);
</script>
我有一个云页面。
在这个页面上,我有
- SSJS 脚本,从数据扩展中检索记录。从数据扩展中的计数列,我想创建一个像 这样的数组
数据数组 = [10,20,30,40,50]
- 然后我需要将这个数组 (dataarray) 传递给另一个我可以在 d3 中使用它的脚本。
我面临的问题是如何将值从服务器 运行 的脚本传递到客户端 运行 的脚本。我已经尝试了隐藏的 html 元素方法,该方法不起作用并且不保证脚本执行的顺序。
能否请您告知如何传递值。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="https://www.abc.nl/favicon.ico">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
</head>
<body>
<script runat="Server">
Platform.Load("core","1.1.5");
var data_rec;
try
{
var myDE = DataExtension.Init('01_Reporting_Sent_Today');
var filter = {Property:'return',SimpleOperator:'equals',Value:'1'};
var data = myDE.Rows.Retrieve(filter);
data_rec = data.length;
Write("<br/>The len is :" + Stringify(data_rec))
}catch(ex)
{
Write("<br/>The error is :" + Stringify(ex))
}
</script>
<script>
var datachart = [10,20,30,40,50];
var canvas = d3.select("body")
.append("svg")
.attr("width",500)
.attr("height",500)
var bars = canvas.selectAll("rect")
.data(datachart)
.enter()
.append("rect")
.attr("width",function (d) { return d;})
.attr("height",50);
</script>
</body>
</html>
所以第一个脚本中的数据数组,我需要在第二个脚本中使用
您可以使用 AMPScript 来 return JS 脚本中的值:
更新:修复了 Reidenshi
指出的示例中的错误语法<script runat="server">
...
var dataString = Stringify(data);
Variable.SetValue("@dataString", dataString);
</script>
<script>
var data = JSON.parse(%%=v(@dataString)=%%);
</script>