Javascript output aanpassen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • supervinnie40
  • Registratie: Juli 2010
  • Laatst online: 30-09 16:21
Ik ben al een poosje bezig in Google Tag Manager om de data die we verzamelen te verbeteren. Bij een paar probeer ik de totaalprijs van de winkelwagen te verzamelen als een "eventvalue".
Bij diverse andere situaties kon ik die uit de Datalayer halen of desnoods uit de HTML plukken. Maar op een paar pagina's lukt dit niet.
Wel heb ik een script gevonden (van Google Dynamic Remarketing) dat (bijna) precies doet wat ik wil.

Onderstaand stuk Javascript heb ik een heel klein beetje bewerkt om geen onnodige data te geven. Maar nu loop ik vast. Dit script geeft als resultaat (bijvoorbeeld:)
code:
1
{ ecomm_totalvalue: "30.19" }

Maar ik zou graag het volgende bereiken:
code:
1
"30.19"
.
Hierbij is "30.19" de totaalprijs van de winkelwagen.

Mijn kennis van Javascript is beperkt en wat ik ook probeer, of ik sloop het hele script ofwel het resultaat is niet wat ik nodig heb.

Kan iemand mij helpen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function() {
    
  var data = {
    'ecomm_totalvalue2' : 0
  };
    
  $('.product').each(function() {
    var $this = $(this);
        
    var price = $.trim($this.find('.product__price').text()).split(' ')[1].replace(',', '.');
    
    data.ecomm_totalvalue2 += parseFloat(price);
  });

  data.ecomm_totalvalue2 = data.ecomm_totalvalue2.toFixed(2);
  
  return data;
}


Voor de duidelijkheid, dit is een bewerkt stuk code van Google Dynamic Remarketing. Ik heb "totalvalue" hernoemd naar "totalvalue2" omdat ik bang was dat het ander conflicten zou veroorzaken met de originele "totalvalue" van het originele GDR script dat op andere pagina's getriggerd wordt.

Alle reacties


Acties:
  • 0 Henk 'm!

  • D4NG3R
  • Registratie: Juli 2009
  • Nu online

D4NG3R

kiwi

:)

Ik zou zeggen neem even een kijkje hier: https://developer.mozilla...uide/Working_with_objects

En gebruik let/const i.p.v. var :P

Wat heb je tot dusver zelf geprobeerd wat niet werkt dan?

[ Voor 44% gewijzigd door D4NG3R op 11-08-2023 13:25 ]

Komt d'r in, dan kö-j d’r oet kieken


Acties:
  • 0 Henk 'm!

  • supervinnie40
  • Registratie: Juli 2010
  • Laatst online: 30-09 16:21
D4NG3R schreef op vrijdag 11 augustus 2023 @ 13:16:
Wat heb je tot dusver zelf geprobeerd wat niet werkt dan?
Ik heb het script niet geschreven ;-). Ik ontdekte dat er een variabele die (onder andere) de data gaf die ik zocht. Dat zag er eigenlijk zo uit:
code:
1
2
3
4
5
{
  ecomm_prodid: [undefined, undefined],
  ecomm_pagetype: "cart",
  ecomm_totalvalue: "642.31"
}


In dit voorbeeld zou enkel "642.31" hetgeen zijn dat ik nodig heb. Daarom heb ik de Javascript opgezocht in Tag Manager die hierbij gebruikt werd en de eerste 2 regels (ecomm_prodid en ecomm_pagetype) heb ik eruit gehaald (dat ging best makkelijk eigenlijk).

Daarna heb ik geprobeerd om
code:
1
2
3
var data = {
    'ecomm_totalvalue2' : 0
  };

Te veranderen in (onder andere:)

code:
1
var data = ;

code:
1
2
3
var data = {
   0
  };

code:
1
2
3
var data = {
    'ecomm_totalvalue2'
  };

code:
1
2
var 'ecomm_totalvalue2' 
  };

(ik zei toch dat ik hier niet zoveel ervaring mee heb ;-) )

Maar helaas, niets van deze opties werkte. De meeste aanpassingen waren ook gewoon een probeersel. Gewoon doen en daarna kijken wat het resultaat is. In Tag Manager kun je niet snel dingen helemaal slopen.

Daarna ben ik verder gaan zoeken en heb ik de volgende dingen getest:

code:
1
2
3
4
data = data.ecomm_totalvalue2.toFixed(2);
  
  return data;
}


code:
1
2
3
4
data.ecomm_totalvalue2 = data.toFixed(2);
  
  return data;
}


code:
1
2
3
4
data = data.toFixed(2);
  
  return data;
}


code:
1
2
3
4
data.ecomm_totalvalue3 = data.ecomm_totalvalue4.toFixed(2);
  
  return data;
}

(deze laatste was een test om te zien of het getal in de output ook zou veranderen, misschien wist ik dan welke waarde wordt gebruikt in de uiteindelijke output?)

Helaas werkten deze opties ook niet.

Acties:
  • +1 Henk 'm!

  • supervinnie40
  • Registratie: Juli 2010
  • Laatst online: 30-09 16:21
Gevonden! Eureka ;-)

Toen ik mijn vorige post terug aan het lezen was, op zoek naar een denkfout, ontdekte ik in mijn notities dat ik een "typefout" had gemaakt.

Het laatste deel van de code is:
code:
1
2
3
4
5
6
  });

  data.ecomm_totalvalue2 = data.ecomm_totalvalue2.toFixed(2);
  
  return data;
}


En dit had ik aangepast (als test) naar:

code:
1
2
3
4
5
6
  });

  data. = data.ecomm_totalvalue2.toFixed(2);
  
  return data;
}

(waar eerst "data.ecomm_totalvalue2" stond, had ik alleen "ecomm_totalvalue" weggehaald, maar niet de "." (punt) tussen "data" en "ecomm_totalvalue")

Ik zag het verschil met mijn notitie en mijn bericht hierboven, en zag de punt staan.
Die heb ik alsnog weggehaald en getest:
resultaat:
code:
1
"30.19"


De complete code ik nu dus gebruik (wie weet wie dit ooit via Google vind en kan gebruiken):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function() {
    
  var data = {
    'ecomm_totalvalue2' : 0
  };
    
  $('.product').each(function() {
    var $this = $(this);
        
    var price = $.trim($this.find('.product__price').text()).split(' ')[1].replace(',', '.');
    
    data.ecomm_totalvalue2 += parseFloat(price);
  });

  data = data.ecomm_totalvalue2.toFixed(2);
  
  return data;
}

Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je hebt geen object nodig om je totaal bij te houden. Je kan ook een losse 'total'-variabele gebruiken (of hoe je het ook wilt noemen):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function() {
  let total = 0;
    
  $('.product').each(function() {
    const $this = $(this);
        
    const price = $.trim($this.find('.product__price').text()).split(' ')[1].replace(',', '.');
    
    total += parseFloat(price);
  });

  const totalText = total.toFixed(2);
  
  return totalText;
}


Verder kan je zoals D4NG3R al opmerkte beter const en let gebruiken ipv var. var werkt erg vreemd en is lastig goed te doen. Bij let en const bestaat je variabele binnen de { } zoals je zou verwachten. let is voor als je je variable nog moet kunnen aanpassen zoals de total hierboven. const gebruik je als het niet meer wijzigt.

Acties:
  • 0 Henk 'm!

  • supervinnie40
  • Registratie: Juli 2010
  • Laatst online: 30-09 16:21
Bedankt voor de tip. Een mooi moment om de 2 scripts naast elkaar te leggen en te leren wat het allemaal doet.
Pagina: 1