Странная ошибка JavaScript при использовании Google Image Search API - PullRequest
0 голосов
/ 25 июля 2010

Я пытаюсь скопировать поиск картинок 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 поиска?Спасибо за чтение.

1 Ответ

2 голосов
/ 25 июля 2010

Как это может быть, если я добираюсь до этой строки посредством обратного вызова, который запускается при загрузке API поиска? Спасибо за чтение.

Вы не передаете обратный вызов, но немедленно вызываете функцию, ставя () после нее. searchCallback() в свою очередь вызывает se(), который пытается вызвать google.search.SearchControl, но google.search на этом этапе не определен, и вызов любого свойства или функции на undefined вызовет TypeError.

Заменить

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

с

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