2014-12-08 4 views
0

데이터베이스와 통신하는 동적 AJAX 검색 막대를 만들려고합니다. 여기 내 코드가있다.readyState가 4로 변경되지 않습니다

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 = ''; 
} 

문제는 readyState가 0에서 1로 변경되지만 다른 상태로 변경되지 않는다는 것입니다. 함수를 입력하려면 4로 변경해야합니다. handleSearchSuggest(). 또한 콘솔에서이 오류를 얻을 : 형식 오류 : search.onreadystatechange가 null

+1

이 줄은 무엇입니까? : "search.onreadystatechange.handleSearchSuggest;" – Hacketo

+0

콜백 함수 –

+0

콜백 함수를 가리 키지 않고 정의되지 않은 속성을 호출합니다. – Hacketo

답변

1

. (1)의 준비 상태가 OPENED 4를 의미

search.onreadystatechange = handleSearchSuggest; 

참고 DONE을 의미한다. XMLHttpRequest 클래스의 속성을 통해 테스트 할 수 있습니다.

XMLHttpRequest.UNSENT == 0 
XMLHttpRequest.OPENED == 1 
XMLHttpRequest.HEADERS_RECEIVED == 2 
XMLHttpRequest.LOADING == 3 
XMLHttpRequest.DONE == 4 
0

시도이다 : 당신은 제대로 콜백 함수를 설정해야

search.onreadystatechange = handleSearchSuggest;  
관련 문제