Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义Google自定义搜索jsapi(查询字符串)_Javascript_Google Api Java Client_Jsapi - Fatal编程技术网

Javascript 自定义Google自定义搜索jsapi(查询字符串)

Javascript 自定义Google自定义搜索jsapi(查询字符串),javascript,google-api-java-client,jsapi,Javascript,Google Api Java Client,Jsapi,你好 我正在创建谷歌cse功能来搜索。使用此代码时,脚本不会设置查询字符串。这是一个令人耳目一新的页面。也许有人知道怎么做对了?我只需要对每个搜索页面进行不同的搜索,例如: 我可以用parseParamsFromUrl函数来实现吗 <div id="cse" style="width: 100%;">Loading</div> <script src="http://www.google.com/jsapi" type="text/javascript"&g

你好

我正在创建谷歌cse功能来搜索。使用此代码时,脚本不会设置查询字符串。这是一个令人耳目一新的页面。也许有人知道怎么做对了?我只需要对每个搜索页面进行不同的搜索,例如: 我可以用parseParamsFromUrl函数来实现吗

    <div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
google.load('search', '1', {language : 'en', style : google.loader.themes.MINIMALIST});
google.setOnLoadCallback(function(){
var cse = new google.search.CustomSearchControl('13707349811359660237:cl5vrpn6mu8');
cse.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
cse.draw('cse');
cse.setNoResultsString('No results for this query, try a different search.');
cse.setSearchStartingCallback({}, function() {
var q = cse.getInputQuery();
window.location.search = '?q='+q;
});
Function parseParamsFromUrl() {
  var params = {};
  var parts = window.location.search.substr(1).split('\x26');
  for (var i = 0; i < parts.length; i++) {
    var keyValuePair = parts[i].split('=');
    var key = decodeURIComponent(keyValuePair[0]);
    params[key] = keyValuePair[1] ?
        decodeURIComponent(keyValuePair[1].replace(/\+/g, ' ')) :
        keyValuePair[1];
  }
  return params;
}
var urlParams = parseParamsFromUrl();
var queryParamName = "q";
if (urlParams[queryParamName]) {
  cse.execute(urlParams[queryParamName]);
}
}, true);
</script>
加载
load('search','1',{语言:'en',样式:google.loader.themes.MINIMALIST});
setOnLoadCallback(函数(){
var cse=new google.search.CustomSearchControl('13707349811359660237:cl5vrpn6mu8');
cse.setResultSetSize(google.search.search.FILTERED\u cse\u RESULTSET);
cse.提款(“cse”);
cse.setNoResultsString('此查询没有结果,请尝试其他搜索');
setSearchStartingCallback({},function(){
var q=cse.getInputQuery();
window.location.search='?q='+q;
});
函数parseParamsFromUrl(){
var params={};
var parts=window.location.search.substr(1.split)('\x26');
对于(变量i=0;i

任何帮助都会很感激的

我自己回答了我的问题。这是工作脚本

google.load('search', '1', {language : 'lt style: google.loader.themes.MINIMALIST '});
google.setOnLoadCallback(function() {
    var customSearchControl = new google.search.CustomSearchControl('014092587915392242087:l98hzi05fja'); // change this to your unique ID
    customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
    customSearchControl.setLinkTarget(google.search.Search.LINK_TARGET_NEW); // open results in new window
    var options = new google.search.DrawOptions();
    options.setAutoComplete(true);
    customSearchControl.draw('cse'); // set the results div id
    customSearchControl.execute("<?php if (isset($_GET['q'])) echo filter_var($_GET['q'],     FILTER_SANITIZE_STRING); ?>"); // run the search using the value of $_GET['q']
    customSearchControl.setSearchStartingCallback({}, function() {
        var q =  customSearchControl.getInputQuery();
        window.location.search = '?q='+q;
    });
}, true);
google.load('search','1',{language:'lt style:google.loader.themes.MINIMALIST'});
setOnLoadCallback(函数(){
var customSearchControl=new google.search.customSearchControl('01409257915392242087:l98hzi05fja');//将其更改为您的唯一ID
customSearchControl.setResultSetSize(google.search.search.FILTERED\u CSE\u RESULTSET);
customSearchControl.setLinkTarget(google.search.search.LINK_TARGET_NEW);//在新窗口中打开结果
var options=new google.search.DrawOptions();
选项。设置自动完成(true);
customSearchControl.draw('cse');//设置结果div id
customSearchControl.execute(“”;//使用$\u GET['q']的值运行搜索
customSearchControl.setSearchStartingCallback({},函数(){
var q=customSearchControl.getInputQuery();
window.location.search='?q='+q;
});
},对);

现在,每个搜索都出现在url中,您实际上可以在JavaScript中实现这一点,正如您在问题中尝试的那样,并通过使用HTML5历史API而不是刷新页面来进一步改进它。我就是这样做的:

首先,我们需要jQuery插件来获取参数(如果您有PHP,则无需此插件,仅供参考):

最后是Google CSE的代码,假设您的搜索页面位于
/search

google.load('search', '1', {language : 'en', style : google.loader.themes.MINIMALIST});
google.setOnLoadCallback(function() {
    var searchControl = new google.search.CustomSearchControl('YOUR_SEARCH_ID');
    searchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET );
    searchControl.draw('cse');
    searchControl.execute($.QueryString["q"]);
    searchControl.setSearchStartingCallback({}, function() {
            var q =  searchControl.getInputQuery();
            pushState("/search?q=" + q);
    })
}, true);

伟大的解决方案。。。这就是我要找的
function pushState(path) {
    if (typeof(window.history.pushState) == 'function') {
        window.history.pushState(null, path, path);
    } else {
        window.location.hash = '#!' + path;
    }
}
google.load('search', '1', {language : 'en', style : google.loader.themes.MINIMALIST});
google.setOnLoadCallback(function() {
    var searchControl = new google.search.CustomSearchControl('YOUR_SEARCH_ID');
    searchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET );
    searchControl.draw('cse');
    searchControl.execute($.QueryString["q"]);
    searchControl.setSearchStartingCallback({}, function() {
            var q =  searchControl.getInputQuery();
            pushState("/search?q=" + q);
    })
}, true);