[英]Uncaught TypeError: Cannot read property 'length' of undefined?
我在這里有一些代碼,可以在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>
基本上,這意味着您正在嘗試對尚未定義值的變量使用屬性,但您可能會認為是。
ajax(firstname)
,導致firstname
為null或未定義,因此它不包含屬性長度。 answer
為null或未定義。 如果firstname
為null或未定義,檢查firstname
的長度是否為0還不夠。 在開始檢查firstname
的lenght
屬性之前,請確保其名稱不為null或undefined,並在if語句內移動for
循環,以確保即使它為null或undefined,您也不會嘗試訪問answer
的lenght
屬性。
提供帶有錯誤的行將有助於判斷是哪種情況,記錄所命中的代碼段也將有助於您了解語句是否得到滿足。
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}
在你的代碼中
if(firstname.length== 0)
在此行中,您所調用的“ firstname
”的“長度”可能為null或未定義,即。 它沒有任何價值。 因此,您會遇到這種錯誤。 確保“ firsname
”具有值。 然后檢查一下。
因為有時返回的狀態與“ 4”不同。 將'for'周期放入條件'if'中:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.