【问题标题】:javascript function doesn't seem to be callingjavascript函数似乎没有调用
【发布时间】:2014-12-07 14:23:14
【问题描述】:

我正在创建一个从数据库返回结果的 AJAX 动态搜索栏。我发现当我打开调试器时,代码没有进入函数 handleSuggest() 设置显示结果的 div 的内部 html。这是我的代码。

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

【问题讨论】:

  • 这个问题非常具体:尝试将您的代码缩减为问题的最小示例。更好的是,在示例中包含一个 jsfiddle。
  • 在你的函数 ajaxSearch 中你应该这样做search.onreadystatechange = handleSearchSuggest;采取look

标签: javascript ajax search dynamic


【解决方案1】:

问题出在这一行:

search.onreadystatechange.handleSearchSuggest();

search.onreadystatechange 需要分配一个回调函数。

将其更改为以下内容:

search.onreadystatechange = handleSearchSuggest;

注意这里不会调用handleSearchSuggest 函数,因为onreadystatechange 需要一个回调函数而不是函数的结果。

【讨论】:

  • 如何添加回调函数?
  • handleSearchSuggest 是你的回调函数。
  • 控制台现在给我这个错误:TypeError: search.onreadystatechange is null
  • 设置search.onreadystatechange后有search.send(null);声明吗?
  • 尝试设置search.onreadystatechange = function() { console.log (search.responseText) }进行调试。
猜你喜欢
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
相关资源
最近更新 更多