0

我正在尝试从此页面复制 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 时运行的回调到达该行,这怎么可能?谢谢阅读。

4

1 回答 1

2

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

您没有传递回调,而是通过()在它之后立即调用该函数。searchCallback()依次调用se()尝试调用google.search.SearchControl,但google.search此时未定义的调用,并且调用任何属性或函数undefined将抛出TypeError.

代替

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

google.load("search", "1",{"callback":searchCallback});
于 2010-07-25T08:05:33.560 回答