Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

Getting multiple query parameters in the s.util.getQueryparam

haritikam738202
Level 3
Level 3

I want to be able to capture the multiple query parameters in s.campaign variable.

URL

www.example.com?cmpid=hhhh&source=ssss&medium=dddd

Code

If(!s.campaign) s.campaign=s.Util.getQueryParam('cmpid')

When I adjust the code to do the following:

If(!s.campaign)

s.campaign=s.Util.getQueryParam('cmpid')

s.campaign=s.Util.getQueryParam('source')

Result =ssss - only the source value from the URL.

How do I modify my code to capture s.campaign =hhhh:ssss:dddd

1 Accepted Solution
vivekk58878436
Correct answer by
Level 2
Level 2

I belive you are overridding.

Try this - var ss = s.Util.getQueryParam('x')+":"+s.Util.getQueryParam('a')+":"+s.Util.getQueryParam('b');alert(ss);

View solution in original post

10 Replies
vivekk58878436
Correct answer by
Level 2
Level 2

I belive you are overridding.

Try this - var ss = s.Util.getQueryParam('x')+":"+s.Util.getQueryParam('a')+":"+s.Util.getQueryParam('b');alert(ss);

View solution in original post

haritikam738202
Level 3
Level 3

Never mind. It worked!!

I used this:

s.campaign = s.Util.getQueryParam('cmpid')+":"+s.Util.getQueryParam('source')+":"+s.Util.getQueryParam ('medium');

haritikam738202
Level 3
Level 3

I set this up in my main library management code.

But for any page (without Query parameters), s.campaign value is now showing ":::". How do I modify the code to not capture any value when the parameters are not present?

Stewart_Schilling
Community Advisor
Community Advisor

s.campaign  = [s.Util.getQueryParam('cmpid'),s.Util.getQueryParam('source'),s.Util.getQueryParam ('medium')].join(":").replace(/::/,'');

haritikam738202
Level 3
Level 3

The same logic is not working for the below:

s.campaign=[s.Util.getQueryParam('source'),s.Util.getQueryParam('cmpid')].join("-").replace(/-/,'');

the value is being generated as sourcecmpid (without the dash). Any suggestions on modifying it?

Stewart_Schilling
Community Advisor
Community Advisor

I think you might be missing a couple foundational concepts.  Let's tear this thing apart and look at each part.

s.campaign  = [s.Util.getQueryParam('cmpid'),s.Util.getQueryParam('source'),s.Util.getQueryParam ('medium')].join(":").replace(/::/,'');

The first thing to understand is that there is a pipeline of activity, meaning that one operation feeds the one to the right which in turn feeds the next. Below I break it apart into three different lines of code:

s.campaign  = [s.Util.getQueryParam('cmpid'),s.Util.getQueryParam('source'),s.Util.getQueryParam ('medium')];

s.campaign = s.campaign.join(":");

s.campaign = s.campaign.replace(/::/,'');

Let's look at each line:

// Line 1 - This line creates a javascript Array from the values returned by three function calls.

s.campaign  = [s.Util.getQueryParam('cmpid'),s.Util.getQueryParam('source'),s.Util.getQueryParam ('medium')];

Let's decompose this line even more:

Now let's see it in action:

If our URL is http://www.foo.com/some/path?source=Apples&medium=Oranges&cmpid=Bananas

If we ran just the code above, we'd end up with the array, ["Bananas", "Apples", "Oranges"]

If our URL is http://www.foo.com/some/path?cmpid=Bananas

If we ran just the code above, we'd end up with the array, ["Bananas", "", ""]

If our URL is http://www.foo.com/some/path?name=Martha&age=32

If we ran just the code above, we'd end up with the array, ["", "", ""]

Two notes on the above:  First, note that the order of the parameters in the URL's query string does not matter. They are put into the array in a set order.  Second, note that if a query parameter does not exist, we put an empty string into the array.

Now for line 2:

This takes the array from the prior step and concatenates all of its parts into a string using the delimiter that we passed in.

Here are the examples from above:

Finally, line 3:

This line looks for specific patterns in a string and replaces that pattern with an empty string.   Essentially, find all instances of "::" and remove them.

Here are the examples from above:

Q.E.D

Now I leave it to you.  Armed with this new understanding can you answer your own question?

If not, DM me and I will give you the solution.

-Stew

haritikam738202
Level 3
Level 3

Hi Stew,

Thank you so much for the great explanation! I really appreciate this to help me understand the fundamentals.

I think the code below for the URL first joins the query parameters with "-" and then applies the replace logic to show the value without the delimiter. Hence, I was seeing the values just sourcecmpid instead of source-cmpid.

s.campaign=[s.Util.getQueryParam('source'),s.Util.getQueryParam('cmpid')].join("-").replace(/-/,'');

However, with the code below, it will join the two parameters with the delimiter as source-cmpid and if the value is empty, it will return with just "-" for s.campaign:

s.campaign=[s.Util.getQueryParam('source'),s.Util.getQueryParam('cmpid')].join("-")

Now, I have to write a logic to replace "-" when there is no query parameter to return an empty string as below:

s.campaign=[s.Util.getQueryParam('source'),s.Util.getQueryParam('cmpid').join("-")].replace(/-/,'');

Did I get it right?

Stewart_Schilling
Community Advisor
Community Advisor

You make a good point. And, yes, you're on track.

I noticed a couple of things while thinking about your answer. Try the following replace logic.

["a","b"].join("-").replace(/(^-)|(-$)/g,'') --> "a-b"

["","b"].join("-").replace(/(^-)|(-$)/g,'') --> "b"

["a",""].join("-").replace(/(^-)|(-$)/g,'') --> "a"

["",""].join("-").replace(/(^-)|(-$)/g,'') --> ""

s.campaign=[s.Util.getQueryParam('source'),s.Util.getQueryParam('cmpid')].join("-").replace(/(^-)|(-$)/g,'');

Note that the solution changes slightly if you have 3 or more items in the array.

haritikam738202
Level 3
Level 3

Thank you! This does work - and now I understand why the logic would differ based on the number of query parameters.

Appreciate your help!!