我在这里有一些代码来搜索keyup()事件期间的现有名称。它得到了正确的结果。但它显示Cannot read property "length" of undefined
。为什么呢?
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>
答案 0 :(得分:1)
它基本上意味着你试图在变量上使用一个属性,但仍然没有定义,但你可能认为它是。
ajax(firstname)
,导致firstname
为null或未定义,因此它不包含任何属性长度。answer
为空或未定义。如果firstname
的长度为0或者未定义,则检查firstname
的长度是否为0是不够的。在开始检查lenght
属性之前,请确保for
不为null或未定义,并在if语句中移动lenght
循环,以确保您赢了&#39 ;尝试访问answer
的{{1}}属性,即使它为null或未定义。
提供一个包含错误的行将有助于确定它是哪种情况,记录命中的代码段也可以帮助您了解哪些if语句已经完成。
答案 1 :(得分:0)
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
块。只是预感。
另外,inb4“为什么这一切都在一行”,使用这个CSS:#hh {white-space:pre-wrap}
答案 2 :(得分:0)
在您的代码中
if(firstname.length== 0)
在这一行你打电话&#34;长度&#34; &#34; firstname
&#34;可能是null或undefined,即。它没有任何价值。所以你得到了这个恐怖。确保&#34; firsname
&#34;有价值。然后检查一下。
答案 3 :(得分:0)
因为它有时会返回与&#39; 4不同的状态。把&#39;放在&#39;条件内的cyscle&#39;如果&#39; :)