簡體   English   中英

Uncaught TypeError:無法讀取未定義的屬性“ length”?

[英]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>

基本上,這意味着您正在嘗試對尚未定義值的變量使用屬性,但您可能會認為是。

  • 您可能會將null傳遞給ajax(firstname) ,導致firstname為null或未定義,因此它不包含屬性長度。
  • 如果不滿足if條件,則answer為null或未定義。

如果firstname為null或未定義,檢查firstname的長度是否為0還不夠。 在開始檢查firstnamelenght屬性之前,請確保其名稱不為null或undefined,並在if語句內移動for循環,以確保即使它為null或undefined,您也不會嘗試訪問answerlenght屬性。

提供帶有錯誤的行將有助於判斷是哪種情況,記錄所命中的代碼段也將有助於您了解語句是否得到滿足。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM