我有一个基本上像这样的脚本:
<script>
// Send transaction data with a pageview if available
// when the page loads. Otherwise, use an event when the transaction
// data becomes available.
dataLayer.push({
'ecommerce': {
'purchase': {
'actionField': {
'id': 'T12345', // Transaction ID. Required for purchases and refunds.
'affiliation': 'Online Store',
'revenue': '35.43', // Total transaction value (incl. tax and shipping)
'tax':'4.90',
'shipping': '5.99',
'coupon': 'SUMMER_SALE'
},
'products': [{ // List of productFieldObjects.
'name': 'Triblend Android T-Shirt', // Name or ID is required.
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Gray',
'quantity': 1,
'coupon': '' // Optional fields may be omitted or set to empty string.
},
{
'name': 'Donut Friday Scented T-Shirt',
'id': '67890',
'price': '33.75',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Black',
'quantity': 1
}]
}
}
});
</script>
基本上,我需要在代码中执行此脚本,该脚本将由计划任务每xx小时(可能每4小时)触发一次。
API链接:
https://developers.google.com/tag-manager/enhanced-ecommerce#purchases
我感兴趣的部分是:
衡量购买
基本上,因为我找不到用于c#或PHP的任何实现,所以我决定走这条路线,在后台执行javascript ...
我认为它可能是这样的:
private void ExecuteMyScript(){
// Now to execute the script above ...
}
此方法将由计划的任务每4小时触发一次。
这在.NET MVC中可行吗?这是我第一次遇到这样的事情,因此所有的帮助和建议都将受到欢迎。
答案 0 :(得分:1)
您可以使用Java脚本的setInterval()
从客户端进行重复。例子
setInterval(
function(){
alert("Hello World"); // Replace this line with your code that you want to repeat every 3 seconds.
},
3000
);
或者您在后端实施计划的任务并实施发布订阅模式。 Java脚本通过其回调函数从服务器预订排定广播的位置。如果您要寻找它,可以有很多方法,但由于我自己也没有尝试过,因此我不知道推荐哪种方法。有关实现“实时” /“可订阅的” api端点的信息,请参见SignalR,WebSockets等。我只能在下面为您提供一个伪代码来说明这个想法。
// C# backend part
namespace ScheduledTask
{
public class NotificationTask
{
// Some kind of an event emitter class
public Event notificationEvent;
// Some kind of Scheduler/Timer class library
private ScheduleTimer scheduler;
// Run()
public void Run(IScheduledTask sheduledTask)
{
scheduler.start(timeout);
}
// timeout()
private void timeout(data)
{
// emit event / notify
notificationEvent.broadcast(data);
}
}
}
// JavaScript frontend part
// Subscribe to endpoint
api('/notification/id=1').subscribe(function(notification){
// Do something with data received
});
答案 1 :(得分:1)
这当然是可能的,并且您有很多选择……看到您使用的是 ASP.NET MVC ,我假设您使用的是Windows操作系统。您可以创建Windows服务并每4小时执行一次计划的工作...
对于我的应用程序(电子商务网站上也是如此),我使用Topshelf编写了Windows服务,该服务每5分钟运行一次...但是您不必使用topshelf编写Windows服务,您只需创建一个Windows Service app
根据您的托管环境,您还有其他选择...如果您的网站托管在AWS上,则可以创建AWS Lambda function并将lambda函数配置为及时运行。