Ошибка JavaScript, push не является функцией - PullRequest
0 голосов
/ 02 июня 2018

Я только начал изучать JavaScript.Я сделал функцию сохранения, чтобы сохранить данные в локальном хранилище, но каждый раз, когда я пытаюсь сохранить данные, всегда появляется эта ошибка: push - это не функция.

Ошибка в этом фрагменте кода:

var issues = JSON.parse(localStorage.getItem('issues'));
issues.push(issue);

Я пытаюсь получить данные из локального хранилища.предполагается, что var tasks - это массив объектов, поэтому я могу вставить в него другой объект.

Это полный код:

function fetchIssues () {
  var issues = JSON.parse(localStorage.getItem('issues'));
  var issuesList = document.getElementById('issuesList');

  issuesList.innerHTML = '';

  for (var i = 0; i < issues.length; i++) {
    var id = issues[i].id;
    var desc = issues[i].description;
    var severity = issues[i].severity;
    var assignedTo = issues[i].assignedTo;
    var status = issues[i].status;

    issuesList.innerHTML +=   '<div class="well">'+
    '<h6>Issue ID: ' + id + '</h6>'+
    '<p><span class="label label-info">' + status + '</span></p>'+
    '<h3>' + desc + '</h3>'+
    '<p><span class="glyphicon glyphicon-time"></span> ' + severity + ' '+
    '<span class="glyphicon glyphicon-user"></span> ' + assignedTo + '</p>'+
    '<a href="#" class="btn btn-warning" onclick="setStatusClosed(\''+id+'\')">Close</a> '+
    '<a href="#" class="btn btn-danger" onclick="deleteIssue(\''+id+'\')">Delete</a>'+
    '</div>';
  }
}

document.getElementById('issueInputForm').addEventListener('submit', saveIssue);

function saveIssue(e) {
  var issueId = chance.guid();
  var issueDesc = document.getElementById('issueDescInput').value;
  var issueSeverity = document.getElementById('issueSeverityInput').value;
  var issueAssignedTo = document.getElementById('issueAssignedToInput').value;
  var issueStatus = 'Open';
  var issue = {
    id: issueId,
    description: issueDesc,
    severity: issueSeverity,
    assignedTo: issueAssignedTo,
    status: issueStatus
  }

  if (localStorage.getItem('issues') === null) {
    var issues = [];
    issues.push(issue);
    localStorage.setItem('issues', JSON.stringify(issues));
  } else {
    var issues = JSON.parse(localStorage.getItem('issues'));
    issues.push(issue);
    localStorage.setItem('issues', JSON.stringify(issues));
  }

  document.getElementById('issueInputForm').reset();

  fetchIssues();

  e.preventDefault(); 
}

function setStatusClosed (id) {
  var issues = JSON.parse(localStorage.getItem('issues'));

  for(var i = 0; i < issues.length; i++) {
    if (issues[i].id == id) {
      issues[i].status = "Closed";
    }
  }

  localStorage.setItem('issues', JSON.stringify(issues));

  fetchIssues();
}

function deleteIssue (id) {
  var issues = JSON.parse(localStorage.getItem('issues'));

  for(var i = 0; i < issues.length; i++) {
    if (issues[i].id == id) {
      issues.splice(i, 1);
    }
  }

  localStorage.setItem('issues', JSON.stringify(issues));

  fetchIssues();
}

1 Ответ

0 голосов
/ 02 июня 2018

Вы еще не рассматривали случай, когда в этом ключе хранения ничего не установлено.

Попробуйте изменить:

var issues = JSON.parse(localStorage.getItem('issues'));

На

var issues = JSON.parse(localStorage.getItem('issues') || '[]');

Этовернет пустой массив, если getItem('issues') будет нулевым или пустым

Я предлагаю вам обернуть это во вспомогательную функцию и заменить несколько экземпляров, где вы вызываете JSON.parse(getItem)

...