Передача данных в массив - ошибка: невозможно вызвать метод «push» из неопределенного

0

Я пытаюсь понять, как нажимать несколько значений в объект массива.

var fileCount = 0;
var limboData = []; //trying to store values in array to create a table

function XgetAllSites(){
  $().SPServices({
    operation: "GetAllSubWebCollection",
    async: false,
      completefunc: function(xData, Status){
      site = $(xData.responseXML);
      site.find('Web').each(function(){
        //var siteName = $(this).attr('Title');
        var siteUrl = $(this).attr('Url');
        Xgetlists(siteUrl);
        console.log("At All Sites Level"); //check point
      });
    }
  });
}
function Xgetlists(siteUrl){
    $().SPServices({
      operation: "GetListCollection",
      webURL: siteUrl,
      async: false,
        completefunc: function(xData, Status){
          $(xData.responseXML).find("List[ServerTemplate='101']").each(function(){
            var listId = $(this).attr('ID');
            XgetListItems(listId, siteUrl)
            console.log("At site list"); //check point
          });
        }
    });
}
function XgetListItems(listId, siteUrl){
  $().SPServices({
    operation: "GetListItems",
    webURL: siteUrl,
    listName: listId,
    CAMLViewFields: "<ViewFields Properties='True' />",
    CAMLQuery: '<Query><Where><And><Eq><FieldRef Name="_UIVersionString" /><Value Type="Text">1.0</Value></Eq><IsNotNull><FieldRef Name="CheckoutUser" /></IsNotNull></And></Where></Query>',
    async: false,
    completefunc: function (xData,Status){
        $(xData.responseXML).SPFilterNode("z:row").each(function() {   
          var fileName = $(this).attr('ows_LinkFilename');
          var fileUrl = $(this).attr('ows_FileDirRef');
          var checkedTo = $(this).attr('ows_LinkCheckedOutTile');
          var modified = $(this).attr('ows_Modifiedff');

          limboData[fileCount].push({fileName: fileName, fileUrl:fileUrl,checkedTo:checkedTo,modified:modified}); //trying to store information from returned values in array using fileCount as the index
          fileCount++;
          console.log("At list items. File Count: "+fileCount);
      });
    }
  });
}
Теги:
object
arrays

1 ответ

1
Лучший ответ

Проблема в том, что значение массива в индексе limboData[fileCount] не undefined до его установки, поэтому вы не можете использовать:

limboData[fileCount].push(...);

Вместо этого вы можете установить значение либо с помощью индекса:

limboData[fileCount] = { 
    fileName: fileName, 
    fileUrl:fileUrl, 
    checkedTo:checkedTo, 
    modified:modified 
};

Или просто называя push:

limboData.push({
    fileName: fileName, 
    fileUrl:fileUrl, 
    checkedTo:checkedTo, 
    modified:modified
});
  • 0
    Работал отлично, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню