Meir
Meir

Reputation: 2040

Get query string in Google CSE v2

I am using Google CSE v2, and I need to get the query that the user entered. The problem is that it is ajax, and the query is not in the url.

Does anyone know a solution?

Thanks

Upvotes: 3

Views: 1654

Answers (2)

OnNIX
OnNIX

Reputation: 442

I know this is already answered correctly. But for those also looking for a simple JS function to achieve this, here you go. Pass it the name of the variable you want to extract from the query string.

var qs = (function(a) {
  if (a == "") return {};
  var b = {};
  for (var i = 0; i < a.length; ++i) {
    var p=a[i].split('=');
    if (p.length != 2) continue;
      b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
  }
  return b;
})(window.location.search.substr(1).split('&'));

Upvotes: 0

Nathan Stretch
Nathan Stretch

Reputation: 1038

First off, when you create the search box, you need to give it a 'gname' attribute so you can identify it in your javascript, like so:

<gcse:searchbox gname="storesearch"></gcse:searchbox>
<gcse:searchresults gname="storesearch"></gcse:searchresults>

Or, if you're using the html5 style tags (which you should unless you have a reason not to):

<div class="gcse-searchbox" data-gname="storesearch"></div>
<div class="gcse-searchresults" data-gname="storesearch"></div>

(Replace 'storesearch' with whatever name you want to use to identify this custom search.)

More info on that here: https://developers.google.com/custom-search/docs/element#supported_attributes

Then, you can access the custom search element and get the current query like so:

var cseElement = google.search.cse.element.getElement('storesearch'),
query = cseElement.getInputQuery();

or if you don't need the reference to the element anymore, obviously that could be combined into one line:

var query = google.search.cse.element.getElement('storesearch').getInputQuery();

The docs for that part are here: https://developers.google.com/custom-search/docs/element#cse-element

Upvotes: 2

Related Questions