未捕获的类型错误:无法读取属性'长度'的未定义

Uncaught TypeError: Cannot read property 'length' of undefined?

本文关键字:属性 未定义 长度 读取 类型 错误      更新时间:2023-09-26

我在这里有一些代码,用于在keyup((事件期间搜索现有名称。它得到了正确的结果。但它显示了CCD_ 1。为什么?

function ajax(firstname)
 {
var pathxml;
var answer;
var result;
if(firstname.length== 0)
{
    document.getElementById("hh").innerHTML = "";
    return;
}
if (window.XMLHttpRequest) {
  pathxml = new XMLHttpRequest();
}
else
{
    pathxml = new ActiveXObject("Microsoft.XMLHTTP");
}
pathxml.onreadystatechange= function()
{
    if (pathxml.readyState==4 && pathxml.status==200) 
    {
         answer = JSON.parse(pathxml.responseText);
      document.getElementById("hh").innerHTML = "";
    }
    for (var i=0; i<=answer.length; i++)
    {
        result = answer[i].firstname + " " +answer[i].lastname + "'n";
        document.getElementById("hh").innerHTML += result;
    }
}
pathxml.open("GET","books/ax?firstname=" + firstname, true);
pathxml.send();
}

控制器动作:

def ax
@books =Book.where("firstname like ?","#{params[:firstname]}%")
render json: @books.as_json
end

HTML

<form>
<input type="text" name "search" onkeyup="ajax(this.value);">
</form>
<div id ="hh">
</div>

这基本上意味着你试图在变量上使用一个值尚未定义的属性,但你可能认为它是。

  • 您可能将null传递给ajax(firstname),导致firstname为null或未定义,因此它不包含属性长度
  • 如果未满足if条件,则answer为null或未定义

如果firstname为null或未定义,则检查其长度是否为0是不够的。在开始检查lenght属性并将for循环移动到if语句内部之前,请确保firstname不为null或未定义,以确保即使Cannot read property "length" of undefined0的lenght属性为null或已定义,也不会尝试访问它。

提供一行错误将有助于判断是哪种情况,记录哪段代码被命中也有助于了解哪条if语句得到了满足。

if (pathxml.readyState==4 && pathxml.status==200) 
{
     answer = JSON.parse(pathxml.responseText);
  document.getElementById("hh").innerHTML = "";
}
for (var i=0; i<=answer.length; i++)
{
    result = answer[i].firstname + " " +answer[i].lastname + "'n";
    document.getElementById("hh").innerHTML += result;
}

我很确定for循环应该在if块内。只是一种预感。

此外,在4"为什么都在一行"中,使用以下CSS:#hh {white-space:pre-wrap}

在您的代码中

if(firstname.length== 0)

在这一行中,您调用的"firstname"的"长度"可能为null或未定义,即。它没有任何值。所以你得到了这个eror。确保"firsname"具有值。然后检查。

因为它有时返回的状态与'4'不同。将"for"cyscle置于条件"if"内:(