2011-03-15 120 views
2

在試圖在字典中傳遞兩個值的ajax調用(對於遊戲)中,只有一個值似乎正在讀入,而另一個值JavaScript類的實例)似乎在拋出「TypeError:無法讀取未定義的屬性'col'。」儘管這個調用與其他調用完全相同,但是在相同代碼中可以正常工作。混淆TypeError:無法讀取未定義的屬性'n'

這裏的,這似乎是導致問題的類:

function Cell(col, row) { 
    this.col = col; 
    this.row = row; 
    // as well as an .eq and .ne and one or two other simple methods 
} 

這裏的呼叫的建立:

uCell = new Cell(-1, -1); // creates the Cell instance to pass 
var dataout = { 
    ucell:uCell, 
    boardnumber:G.BOARDNUM, 
}; 
// able to alert out both ucell and uCell values here just fine as well as boardnumber 

而這裏的調用本身:

rqst_cellboard = $.ajax({ 
    type:  "POST", 
    data:  dataout, 
    url: "/project03/cellboardcall/", // this never gets called 
    dataType:"json", 
    error: // etc. 
    success: // etc. 

的在進行ajax調用之前拋出錯誤,顯然是因爲它正在建立。看一看引發錯誤的jQuery斷點處的context對象,它看起來像data的值只有boardnumber,而不是ucell。該錯誤讀取TypeError: Cannot read property 'col' of undefined。我無法弄清楚jQuery中的哪個參數未定義,但我假設它是ucell,因爲這應該是col屬性。

一切似乎都很好地進入呼叫定義,但呼叫本身越來越borked。我相信這是非常簡單的,但我無法想象它。感謝任何想法。

+0

您的問題中共享的代碼沒有問題。檢查是否覆蓋「uCell」。 – 2011-03-15 14:27:24

回答

1
rqst_cellboard = $.ajax({ 
    type:  "POST", 
    data:  dataout, 
    url: "/project03/cellboardcall/", // this never gets called 
    dataType:"json", 
    error: // etc. 
    success: // etc. 

我敢打賭,這個問題是關係到事實「DATAOUT」不是一個格式正確的JSON對象。尤其是,它具有對uCell的引用,它本身不是JSON對象,因爲你說它已經實現了方法。

JSON對象必須遵循一套相當嚴格的規則,就它們可以具有的屬性而言。您可能需要爲ajax調用創建一個新對象,該對象只包含您實際想要傳輸的屬性。

+0

好眼睛。如果我「解壓縮」uCell並單獨傳遞col&row值(col:uCell.col,row:uCell.row),這就允許我完成ajax調用。這對代碼的演化來說也是有意義的 - 在Cell()添加了實用方法之前,這些調用在這些調用中運行得更好。謝謝! – wallace 2011-03-15 15:43:07

+1

這種事情在我工作的人身上不斷咬人,所以「它實際上不是一個JSON對象」在調試其他人的代碼時正迅速成爲我的首選想法。 – 2011-03-15 16:06:29

0

擺脫尾隨逗號的:

boardnumber:G.BOARDNUM, // <-- evil comma 

IE是(並且一直)挑剔在對象和數組文本雜散逗號。

+0

即使沒有逗號也是一樣的錯誤:(我正在運行Chrome :)。有趣的是,刪除逗號會導致它更快失敗,並且不會執行'var dataout'和調用本身之間的任何代碼(這只是調試警報)。這意味着它沒有得到接近ajax呼叫的位置,我想。 – wallace 2011-03-15 14:13:01

+0

你說的話完全正確,但它不回答這個問題。 – 2011-03-15 14:17:40

+1

它可能不會回答這個問題,但我認爲它不值得投票。擺脫明顯的錯誤,看看它是否改變了什麼?沒有?至少你擺脫了不同的潛在問題來源,並且可以專注於手頭的問題。 – 2011-03-15 14:31:25

相關問題