【问题标题】:Executing javascript code in background action on web application MVC在 Web 应用程序 MVC 的后台操作中执行 javascript 代码
【发布时间】:2019-07-22 03:57:02
【问题描述】:

我有一个基本上看起来像这样的脚本:

<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 中可行吗?这是我第一次遇到这样的事情,所以非常欢迎所有帮助和建议。

【问题讨论】:

    标签: javascript c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    这当然是可能的,而且您有很多选择...看到您使用的是 ASP.NET MVC,我假设您使用的是 Windows 操作系统。您可以每 4 小时创建一个 Windows 服务并执行您的计划作业...

    对于我的应用程序(电子商务网站也有这种情况),我使用Topshelf 编写了一个 Windows 服务,它每 5 分钟运行一次……但您不必使用 topshelf 来编写windows服务,你可以创建一个Windows Service app

    根据您的托管环境,您还有其他选择...如果您的网站托管在 AWS 上,您可以创建一个 AWS Lambda function 并配置 lambda 函数以及时运行。

    【讨论】:

    • 好的建议,但我仍然不确定如何在 c# 中准确执行 Javascript 代码?我可以以某种方式管理任务调度程序,但在 c# 操作中执行 javascript 代码......这是最大的谜团:/
    • @User987:我不确定我是否遵循你的意图......你安排一个每 4 小时运行一次的任务......这听起来很像你想要运行的维护工作在服务器上......但你说你想在客户端每 4 小时执行一次!!?您是否希望您的用户在浏览器前停留超过 4 小时,并且每 4 小时运行相同的 .js 代码?
    【解决方案2】:

    您可以使用 Java Script 的 setInterval() 从客户端执行重复操作。例如,

    setInterval(
        function(){ 
            alert("Hello World"); // Replace this line with your code that you want to repeat every 3 seconds.
        }, 
        3000
    );
    

    或者您在后端实现计划任务并实现发布订阅模式。您的 Java 脚本使用其回调函数从您的服务器订阅预定广播。如果您寻找它,有很多方法,我不知道该推荐哪个,因为我自己没有尝试过。请参阅 SignalR、WebSockets 等以实现“实时”/“可订阅”api 端点。我只能在下面给你一个伪代码来说明这个想法。

    // 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
    });
    

    【讨论】:

    • 好的建议大家,但我仍然不确定如何在 c# 中准确执行 Javascript 代码?我可以以某种方式管理任务调度程序,但在 c# 操作中执行 javascript 代码......这是最大的谜团:/
    • 您在计划任务中添加一个“广播”实现,客户端 (JS) 将订阅并执行您为其分配的任何回调函数。 JS 还是在前端代码上,和 c# 代码没有关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多