{"id":789,"date":"2014-03-08T22:27:42","date_gmt":"2014-03-08T22:27:42","guid":{"rendered":"http:\/\/tech.avant.net\/q\/?p=789"},"modified":"2019-06-01T04:33:48","modified_gmt":"2019-06-01T04:33:48","slug":"javascript-appending-to-query-string","status":"publish","type":"post","link":"https:\/\/tech.avant.net\/q\/javascript-appending-to-query-string\/","title":{"rendered":"javascript appending to query string"},"content":{"rendered":"<p>I would like to append an associative array to a URL&#8217;s query string. For whatever reason, there is no native javascript method to accomplish this task. This needs to be done manually or using a common web framework such as jQuery.<\/p>\n<p>The first step is to serialize the associative array into a query string,<\/p>\n<h2>native javascript<\/h2>\n<p>With plain-old-javascript, you can do something like this,<\/p>\n<pre class=\"sh_javascript\">var queryVars = {'foo':'bar', 'spam':'eggs', 'tracker':'yes' };\n\nvar queryStringParts = new Array();\nfor(var key in queryVars) {\n  queryStringParts.push(key + '=' + queryVars[key]);\n}\nvar queryString = queryStringParts.join('&amp;');\n<\/pre>\n<p>The value of <span style=\"font-face:monospace; font-weight:bold;\">queryString<\/span> will be<\/p>\n<pre>foo=bar&amp;spam=eggs&amp;tracker=yes<\/pre>\n<h2>jQuery<\/h2>\n<p>Since version 1.2 jQuery has supported the <a href=\"https:\/\/api.jquery.com\/jQuery.param\/\" target=\"+blank\" rel=\"noopener noreferrer\">jQuery.param()<\/a> function to serialize any array or object into a URL query string. The above example becomes,<\/p>\n<pre class=\"sh_javascript\">var queryVars = {'foo':'bar', 'spam':'eggs', 'tracker':'yes' };\n\nvar queryString = jQuery.param(queryVars);\n<\/pre>\n<h2>node.js<\/h2>\n<p>My favorite approach is the node.js <a href=\"http:\/\/nodejs.org\/api\/querystring.html\" target=\"_blank\" rel=\"noopener noreferrer\">querystring.stringify()<\/a> function, I like this as it is easiest to remember,<\/p>\n<pre class=\"sh_javascript\">var queryVars = {'foo':'bar', 'spam':'eggs', 'tracker':'yes' };\n\nvar queryString = querystring.stringify(queryVars);\n<\/pre>\n<h2>Appending ? or &amp;<\/h2>\n<p>In most cases you don&#8217;t want to assume an input url does not already contain a query string, in fact, this would be a rather bad assumption. To get this to work you&#8217;ll want to append your new query string to any existing query string using the &amp; character, otherwise use the ? character. Here is an example,<\/p>\n<pre class=\"sh_javascript\">function appendQueryString(url, queryVars) {\n    var firstSeperator = (url.indexOf('?')==-1 ? '?' : '&amp;');\n    var queryStringParts = new Array();\n    for(var key in queryVars) {\n        queryStringParts.push(key + '=' + queryVars[key]);\n    }\n    var queryString = queryStringParts.join('&amp;');\n    return url + firstSeperator + queryString;\n}\n\nvar url = \"something.html?q=test\";\nvar queryVars = {'foo':'bar', 'spam':'eggs', 'tracker':'yes' };\n\nvar new_url = appendQueryString(url, queryVars);\n<\/pre>\n<p>The value of <span style=\"font-face:monospace; font-weight:bold;\">new_url<\/span> will be<\/p>\n<pre>something.html?q=test&amp;foo=bar&amp;spam=eggs&amp;tracker=yes<\/pre>\n<hr>\n<div id=\"amzn-assoc-ad-aefa7676-1e81-45ee-9f86-a6899fe69243\"><\/div>\n<p><script async=\"\" src=\"\/\/z-na.amazon-adsystem.com\/widgets\/onejs?MarketPlace=US&amp;adInstanceId=aefa7676-1e81-45ee-9f86-a6899fe69243\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I would like to append an associative array to a URL&#8217;s query string. For whatever reason, there is no native javascript method to accomplish this task. This needs to be done manually or using a common web framework such as jQuery. The first step is to serialize the associative array into a query string, native [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/posts\/789"}],"collection":[{"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/comments?post=789"}],"version-history":[{"count":7,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/posts\/789\/revisions"}],"predecessor-version":[{"id":992,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/posts\/789\/revisions\/992"}],"wp:attachment":[{"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/media?parent=789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/categories?post=789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech.avant.net\/q\/wp-json\/wp\/v2\/tags?post=789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}