javascript - 使用 Google 图片搜索 API 时出现奇怪的 javascript 错误

标签 javascript google-api google-search google-search-api

我正在尝试从 this page 复制 Google 图片搜索。这是我的代码:

<script type="text/javascript">
    <% if @note.text == "" %>
        google.load("search", "1",{"callback":searchCallback()});
    <% else %>
        google.load("visualization", "1",{"callback":dummyFunction});
    <% end %>

    function se() {
        var sFormDiv = document.getElementById("searchForm");
        var leftScDiv = document.getElementById("leftSearchControl");

        this.leftControl = new google.search.SearchControl();
        this.searchForm = new google.search.SearchForm(true, sFormDiv);

        this.searchForm.setOnSubmitCallback(this, se.prototype.onSubmit);
        this.searchForm.setOnClearCallback(this, se.prototype.onClear);

        this.leftControl.setResultSetSize(GSearch.LARGE_RESULTSET);

        var searcher;
        var options;

        this.leftControl.addSearcher(new google.search.ImageSearch());

        var drawOptions = new google.search.DrawOptions();
        drawOptions.setDrawMode(GSearchControl.DRAW_MODE_TABBED);

        this.leftControl.setNoResultsString(GSearchControl.NO_RESULTS_DEFAULT_STRING);

        this.leftControl.draw(leftScDiv);

        this.searchForm.execute("Ferrari");

    }

    // when the form fires a submit, grab its
    // value and call the left and right control
    se.prototype.onSubmit = function(form) {
      var q = form.input.value;
      if (q && q!= "") {
        this.leftControl.execute(q);
      }
      return false;
    }

    // when the form fires a clear, call the left and right control
    se.prototype.onClear = function(form) {
      this.leftControl.clearAllResults();
      form.input.value = "";
      return false;
    }

    function searchCallback(){
        new se();
    }

    function dummyFunction() {
    }

</script>

当我运行它时,我收到此错误:

google.search is undefined
this.leftControl = new google.search.SearchControl(); 

如果我通过加载搜索 API 时运行的回调到达该行,这怎么可能?感谢您的阅读。

最佳答案

How can this be, if I'm getting to that line by way of the callback that is run when the search API is loaded? Thanks for reading.

您不是传递回调,而是通过在函数后面放置 () 来立即调用该函数。 searchCallback() 依次调用 se(),后者尝试调用 google.search.SearchControl,但 google.search > 此时未定义,在 undefined 上调用任何属性或函数都会抛出 TypeError

替换

google.load("search", "1",{"callback":searchCallback()});

google.load("search", "1",{"callback":searchCallback});

关于javascript - 使用 Google 图片搜索 API 时出现奇怪的 javascript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328480/

相关文章:

javascript - 将 [object HTMLDocument] 转换为字符串

php - 如何使用我的凭据或特殊生成的 ID 和密码在 google api 中进行身份验证?

google-api - 我可以/应该隐藏错误 403 : org_internal in google login? 的详细信息吗

search-engine - 使用 Google Drive 网站发布发布的 HTML 内容是否已被搜索引擎索引?

seo - 搜索引擎(Google,yahoo,bing等)如何处理重复的内容页面

javascript - React - 使用map()时设置默认属性

javascript - 如何在更改 d3.js 中数据的函数调用之间添加延迟?

javascript - N个异步线程的互斥

php - 谷歌地图 PHP CURL 问题 "Your client has issued a malformed or illegal request. That’ s 我们都知道。”

google-maps - 无法从 Google Places API 获取特殊营业时间