2010-07-25 5 views
0

this page에서 Google 이미지 검색을 복사하려고합니다. 여기 내 코드입니다 : 나는이 실행되는 콜백의 방법으로 그 라인에 얻고 경우 Google 이미지 검색 API를 사용할 때 이상한 자바 스크립트 오류

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

방법이 될 수 있습니다 : 나는 그것을 실행하면,이 오류가

<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> 

검색 API가로드 될 때? 읽어 주셔서 감사합니다.

답변

2

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()google.search.SearchControl을 호출하려고 시도하는 se()을 호출하지만이 시점에서는 google.search이 정의되지 않으며 undefined의 모든 속성이나 함수를 호출하면 TypeError이 반환됩니다.

교체

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

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