2010-12-15 30 views
0

我在做一個AJAX調用,它返回的XML數據,這是我的成功:「函數(回調):如何訪問此JavaScript MAP對象中的數據?

success: function (data) { 
     var $rowArray = $(data).find("[nodeName=z:row]"); 
      $rowArray.each(function(index) { // for each date put it into calMap. 
      calMap[$(this)[index].title] = $(this).attr("ows_Title"); 
      calMap[$(this)[index].date] = $(this).attr("ows_EventDate"); 
      }); 
     } 

calMap是一個全球性的javascript功能之外聲明的對象。

var calMap = {}; 

我想要做的就是創建一個功能,我可以在冠軍通過,才能在搜尋calMap爲標題,如果找到,則返回特定的對象,我會能夠訪問該對象的日期屬性。

問題是,我似乎無法訪問我插入到calMap對象中的數據。對於初學者,我只想打印地圖。嘗試eval'ing it,試圖提醒calMap [0],試圖提醒calMap [0] .title,但沒有。有人可以幫我弄這個嗎?謝謝!

更新: 我想要做這樣的事情:

var data = getData("myTitle"); 

function getData(title) { 
// if title is in calMap, something like this? 
var result = (calMap[title])); 
return result; // returns an object or NOTHING 
} 

然後我去檢查一下日期被定義或沒有,如果是這樣,我會訪問它的屬性(即數據。 .date有意義

?答:。 最後我用一個陣列仍然認爲我應該能夠使用對象映射,但需要得到我的項目完成

這裏的音響用於訪問陣列項目的代碼的最終代碼:

function hasCalDate(code) 
{ 
    var matched = ""; 
    for (var f=0;f<calMap.length;f++){ 
     var re = new RegExp(code); 
     if (re.test(calMap[f].title)) 
     { 
     matched = calMap[f].title+','+calMap[f].date; 
     } 
    } 
return matched; 
}; 

謝謝大家。

+0

嘗試在Chrome或Firebug中使用console.log(calMap)第一個 – kjy112 2010-12-15 21:53:29

+0

哦,是的,控制檯很棒。原來我得到了一系列的對象。 – tresstylez 2010-12-17 05:29:50

回答

0

需要初始化calMap作爲陣列(即方括號,不捲曲的):

var calMap = []; 

然後,你each函數裏,我猜你想要的東西更像

calMap.push({ 
    title: $(this).attr("ows_Title"), 
    date: $(this).attr("ows_EventDate") 
}); 
+0

謝謝Emmett,這個作品 - 但我遠離了一個直的數組,因爲我認爲搜索一個數組與一個對象的效率會比較低。我可以用一個鍵訪問地圖並獲取屬性,而不是遍歷整個數組以找到標題,對吧? – tresstylez 2010-12-15 22:33:07

+0

@tres臨近問題的結尾,你說你正在提醒'calmap [0]'和'calMap [0] .title'(這是數組語法),所以我推斷你正在嘗試創建一個數組。另外,你希望用什麼樣的密鑰訪問屬性? – Emmett 2010-12-15 22:36:12

+0

@ Emmet - 是的,對於混亂感到抱歉。我只是在嘗試不同的事情,但肯定想要使用「對象」。我想說:calMap ['myTitle']並獲得對匹配的特定對象(如果存在)的calMap.date的訪問權限。我會更新我想要做的事情......給我一個秒.. – tresstylez 2010-12-15 22:45:24

0

你的問題是success函數只在你的AJAX請求完成時才運行。如果你想安全地訪問calMap,你需要這樣做裏面的你的回調。

+0

我的成功功能運行良好。它所做的就是填充calMap。其他功能應該可以訪問該數據。 – tresstylez 2010-12-15 22:00:05

+0

@tresstylez是的,它運行良好,但因爲它是異步運行的,所以在執行主線程時,無法確定它何時完成。這就是回調存在的原因,因爲只有在請求完成時纔會調用它們。 – mdarwi 2010-12-15 22:01:57

+0

我不認爲這個假設是正確的。主線程稱爲ajax函數,數組/對象被填充,主線程能夠訪問數組(整個數組)。我只是不知道如何分別訪問每個項目...我會更新我的代碼。 – tresstylez 2010-12-17 05:25:49