簡體   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