2014-12-07 108 views
0

我正在創建一個AJAX動態搜索欄,它從數據庫返回結果。我發現當我打開調試器時,代碼不會進入函數handleSuggest()它設置顯示結果的div的內部html。這是我的代碼。javascript函數似乎沒有調用

function getXmlHttpRequestObject(){ 
if(window.XMLHttpRequest){ 
    return new XMLHttpRequest(); 
} 
else if (window.ActiveXObject){ 
    return new ActiveXObject("Microsoft.XMLHTTP"); 
} 
else{ 
    alert("Your browser does not support our dynamic search"); 
} 
} 

var search = getXmlHttpRequestObject(); 

function ajaxSearch(){ 
if (search.readyState == 4 || search.readyState == 0){ 
    var str = escape(document.getElementById('searchBox').value); 
    search.open("GET", 'searchSuggest.php?search=' + str, true); 
    search.onreadystatechange.handleSearchSuggest(); 
    search.send(null); 
} 
} 

function handleSearchSuggest(){ 
    if(search.readyState == 4){ 
     var ss = document.getElementById('ajaxSearch'); 
     ss.innerHTML = ''; 
     var str = search.responseText.split("\n"); 
     for(i=0; i<str.length-1; i++){ 
      var suggestion = '<div onmouseover="javascript:suggestOver(this);"'; 
      suggestion += 'onmouseout="javascript.suggestOut(this);"'; 
      suggestion += 'onclick="javascript:setSearch(this.innerHTML);"'; 
      suggestion += 'class="suggestLink">' + str[i] + '<div>'; 
      ss.innerHTML += suggestion; 
     } 
    } 
} 

function suggestOver(divValue){ 
    divValue.className = "suggestLink"; 
} 

function suggestOut(divValue){ 
    divValue.className = "suggestLink"; 
} 

function setSearch(x){ 
    document.getElementById('searchBox').value = x; 
    document.getElementById('ajaxSearch').innerHTML = ''; 
} 
+0

此問題非常具體:嘗試將您的代碼縮小爲問題的最小示例。更好的是,包括一個jsfiddle的例子。 – mikemaccana 2014-12-07 14:25:16

+0

裏面你的函數ajaxSearch你應該做這個'search.onreadystatechange = handleSearchSuggest;'採取[看](http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp) – 2014-12-07 14:31:18

回答

2

的問題是在這條線:

search.onreadystatechange.handleSearchSuggest(); 

search.onreadystatechange需要分配給它的回調函數。

將其更改爲以下:

search.onreadystatechange = handleSearchSuggest; 

請注意,這並不在這裏調用handleSearchSuggest功能onreadystatechange需要一個回調函數而不是函數的結果。

+0

我應該如何去添加回調函數? – 2014-12-07 14:54:41

+0

'handleSearchSuggest'是你的回調函數。 – Saravana 2014-12-07 14:56:02

+0

控制檯現在給我這個錯誤: TypeError:search.onreadystatechange爲空 – 2014-12-07 14:58:23