Как мне получить доступ к данным в этом JavaScript-объекте MAP? - PullRequest
0 голосов
/ 16 декабря 2010

Я делаю AJAX-вызов, который возвращает данные XML, и это моя функция success: callback:

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 = {};

Что я хочу сделать, это создать функцию, в которой я могу передать title , чтобы она искала calMap для этого заголовкаи, если найден, конкретный объект возвращается, и я смогу получить доступ к свойству date для этого объекта.

Проблема в том, что я не могу получить доступ к данным, которые явставить в объект calMap.Для начала я просто хочу напечатать карту.Попробовал eval , попробовал предупредить 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
}

тогда я проверю, определена дата или нет, и если это так, я получу доступ к ее свойствам(т. е. data.date . Это имеет смысл?

ОТВЕТ: Я закончил с использованием массива. ВСЕ ЕЩЕ думаю, что я смогу использовать объект MAP, но мне нужно было получить мой проектготово.

Вот окончательный код для кода, который обращается к элементам массива:

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;
};

Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2010

Вам нужно инициализировать calMap как массив (т.е. квадратные скобки, а не фигурные):

var calMap = [];

Затем, внутри вашей функции each, я думаю, вы хотите что-то похожее на

calMap.push({
    title: $(this).attr("ows_Title"),
    date: $(this).attr("ows_EventDate")
});
0 голосов
/ 16 декабря 2010

Ваша проблема в том, что функция success запускается только после завершения вашего запроса AJAX. Если вы хотите получить безопасный доступ к calMap, вам нужно сделать это внутри вашего обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...