2010-12-15 28 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