繁体   English   中英

Google Analytics dataLayer.push 在 Javascript Promise 中不起作用

[英]Google Analytics dataLayer.push not working in a Javascript Promise

我遇到了一个奇怪的问题,试图触发window.dataLayer.push()当该调用放置在Promise中时尝试利用 Google Analytics 跟踪代码管理器dataLayer触发逻辑。 由于以下逻辑,我假设这是基于Promise的:

只需将此代码段放在网站页脚中加载的 a.js 文件中,这工作正常,我看到它在我的控制台中触发:

window.dataLayer = window.dataLayer || [];

window.dataLayer.push({
  'event': 'dataLayer-initialized',
  'pageName': 'First'
});

然后,我使用以下内容更新文件:

const result = callGenericBackend().then((res)=>{return res});
window.dataLayer = window.dataLayer || [];

window.dataLayer.push({
  'event': 'dataLayer-initialized',
  'pageName': 'First'
});

result.then((res)=>{
    window.dataLayer = window.dataLayer || [];

    window.dataLayer.push({
      'event': 'dataLayer-initialized',
      'pageName': 'Second'
    });
  })

function callGenericBackend(pageID) {
    return new Promise((resolve,reject)=>{
      jQuery.ajax({
        type:'post',
        async: true,
        url:myAjax.ajaxurl,
        data : {pageID: pageID},
        dataType: 'json',
        error:(xhr)=>{
          console.warn('ajax error');
          reject(xhr);
          return false;
        },
        success:(data)=>{
          if (data.status === 200) {
            resolve(data);
          } else {
            reject(data);
          }
        }
      })
    })

“第一”继续开火,但“第二”从未开火。 我的callGenericBackend()只是通过.ajax调用返回响应。 我在这里用Promise逻辑使这项工作缺少什么? 如果我在callGenericBackend()中更改async: false它可以工作,但我在控制台中看到此错误:

Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.

不确定这是否会有所帮助,因为我不知道您从请求中获得了什么数据以及您想对这些数据做什么:

window.dataLayer = window.dataLayer || [];

window.dataLayer.push({
  'event': 'dataLayer-initialized',
  'pageName': 'First'
});

function callGenericBackend(pageID) {
    return $.ajax({
        type:'post',
        async: true,
        url:myAjax.ajaxurl,
        data : {pageID: pageID},
        dataType: 'json',
        error:(xhr)=>{
          console.warn('ajax error');
          reject(xhr);
          return false;
        },
        success:(data)=>{
          if (data.status === 200) {
            resolve(data);
          } else {
            reject(data);
          }
        }
      })
    })
}

$.when(callGenericBackend(YOUR_ID)).done(function(response){
    //access response data here

    window.dataLayer.push({
       'event': 'dataLayer-initialized',
       'pageName': 'First'
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM