【问题标题】:Get query string in Google CSE v2在 Google CSE v2 中获取查询字符串
【发布时间】:2012-11-13 19:48:33
【问题描述】:

我使用的是 Google CSE v2,我需要获取用户输入的查询。问题是它是ajax,并且查询不在url中。

有人知道解决办法吗?

谢谢

【问题讨论】:

    标签: ajax google-custom-search


    【解决方案1】:

    首先,当你创建搜索框时,你需要给它一个'gname'属性,这样你就可以在你的javascript中识别它,就像这样:

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

    或者,如果您使用的是 html5 样式标签(除非您有理由不这样做,否则您应该这样做):

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

    (将“storesearch”替换为您要用于标识此自定义搜索的任何名称。)

    更多信息在这里:https://developers.google.com/custom-search/docs/element#supported_attributes

    然后,您可以访问自定义搜索元素并获取当前查询,如下所示:

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

    或者如果您不再需要对该元素的引用,显然可以将其合并为一行:

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

    该部分的文档在这里:https://developers.google.com/custom-search/docs/element#cse-element

    【讨论】:

    • 您需要设置什么才能使用 google.search.cse.element 功能吗?它抱怨谷歌没有被定义,但搜索框本身工作得很好。
    【解决方案2】:

    我知道这已经被正确回答了。但是对于那些也在寻找一个简单的 JS 函数来实现这一点的人来说,你去吧。将要从查询字符串中提取的变量的名称传递给它。

    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('&'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2023-03-07
      相关资源
      最近更新 更多