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この時点では未定義であり、 on のプロパティまたは関数を呼び出すと、undefinedがスローされTypeErrorます。

交換

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

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