2014-12-07 8 views
0

Я создаю динамическую панель поиска AJAX, которая возвращает результаты из базы данных. Я обнаружил, что когда я открываю отладчик, код не вводит функцию handleSuggest(), который устанавливает внутренний html div, где отображаются результаты. Вот мой код.Функция 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

+0

внутри вашей функции ajaxSearch вы должны сделать это: search.onreadystatechange = handleSearchSuggest; 'возьмите [look] (http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp) –

ответ

2

Проблема заключается в этой строке:

search.onreadystatechange.handleSearchSuggest(); 

search.onreadystatechange нуждается в функции обратного вызова, возложенные на него.

Изменить его на следующее:

search.onreadystatechange = handleSearchSuggest; 

Обратите внимание, что это не вызывает функцию handleSearchSuggest здесь onreadystatechange нужна функция обратного вызова не результат функции.

+0

Как мне добавить функцию обратного вызова? –

+0

'handleSearchSuggest' - ваша функция обратного вызова. – Saravana

+0

Консоль теперь дает мне эту ошибку: ТипError: search.onreadystatechange is null –

Смежные вопросы