【问题标题】:readyState will not change to 4readyState 不会更改为 4
【发布时间】:2014-12-08 15:15:05
【问题描述】:

我正在尝试创建一个与我的数据库通信的动态 AJAX 搜索栏。这是我的代码。

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()。 我也在控制台中收到此错误: TypeError: search.onreadystatechange is null

【问题讨论】:

  • 这条线是什么? : "search.onreadystatechange.handleSearchSuggest;"
  • 是回调函数
  • 这是对未定义属性的调用,不指向你的回调函数

标签: javascript ajax search readystate


【解决方案1】:

你需要正确设置回调函数。

search.onreadystatechange = handleSearchSuggest;

请注意,就绪状态 1 表示 OPENED,4 表示 DONE。您可以通过XMLHttpRequest 类的属性对此进行测试:

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

【讨论】:

    【解决方案2】:

    试试:

    search.onreadystatechange = handleSearchSuggest;    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多