JSON stringify завершается ошибкой только тогда, когда данные поступают из зацикленного запроса GET - PullRequest
0 голосов
/ 22 мая 2018

Так что у меня возникают проблемы при попытке создать строку JSON.У меня возникают проблемы только тогда, когда данные, которые я использую для построения объекта / массива, который будет преобразован в строку, поступают из GET-запроса в цикле.

Когда я публикую фактический объект JavaScript в консоли, он содержит все правильные данные.Информация.но не может создать допустимую строку JSON.Я проверил этот метод (примеры ниже) и знаю, что он работает.Я пришел к выводу, что это связано с запросами GET.Я попробовал несколько решений;играл с переменной областью, асинхронное управление потоком, и все еще не повезло.Поэтому я здесь.Чего мне не хватает?

Спасибо всем

Вот код с проблемами:

 var start = 1518;
var end = 1522;
var eventList = {};
eventList['event'] = [];

for (var i = 0; i < (end - start); i++) {
  $.get('https://www.someaddress.com/events/index.php?view=' + (start + i), function(response) {

    var eventRep = $(response).find('h2').text();
    var categoryRep = $(response).find('span.center-name').text();
    var descriptionRep = $(response).find('div.description.col-md-9').find('p').text();

    var eventScrape = {
      "title": eventRep,
      "category": categoryRep,
      "description": descriptionRep
    };
    //alert(eventRep); 
    eventList['event'].push(eventScrape);
  });
}

var str = JSON.stringify(eventList, undefined, 4);
console.log(eventList);
console.log(str);

Ошибка JSON:

    {
    "event": []
}

Вотрабочий пример того, что я хочу:

  var eventList = {};
  eventList['event'] = [];


  for (var i = 0; i < 5; i++) {
    var eventRep = "Event title " + i;
    var categoryRep = "Event category " + i;
    var descriptionRep = "Event description " + i;

    var eventScrape = {
      "title": eventRep,
      "category": categoryRep,
      "description": descriptionRep
    };

    eventList['event'].push(eventScrape);
    //alert(i);
  }

  var str = JSON.stringify(eventList, undefined, 4);
  console.log(eventList);
  console.log(str);

JSON, созданный по примеру:

{  
   "event":[  
      {  
         "title":"Event title 0",
         "category":"Event category 0",
         "description":"Event description 0"
      },
      {  
         "title":"Event title 1",
         "category":"Event category 1",
         "description":"Event description 1"
      },
      {  
         "title":"Event title 2",
         "category":"Event category 2",
         "description":"Event description 2"
      },
      {  
         "title":"Event title 3",
         "category":"Event category 3",
         "description":"Event description 3"
      },
      {  
         "title":"Event title 4",
         "category":"Event category 4",
         "description":"Event description 4"
      }
   ]
}

1 Ответ

0 голосов
/ 22 мая 2018

$.get выполняется асинхронно, поэтому поместите свой код в get функцию

Код решения

var start = 1518;
var end = 1522;
var eventList = {};
eventList['event'] = [];

for (var i = 0; i < (end - start); i++) {
  $.get('https://www.someaddress.com/events/index.php?view=' + (start + i), function(response) {

    var eventRep = $(response).find('h2').text();
    var categoryRep = $(response).find('span.center-name').text();
    var descriptionRep = $(response).find('div.description.col-md-9').find('p').text();

    var eventScrape = {
      "title": eventRep,
      "category": categoryRep,
      "description": descriptionRep
    };
    //alert(eventRep); 
    eventList['event'].push(eventScrape);

    //as $.get is async data will be loaded in async manner so you cannot access it unless it is available
    var str = JSON.stringify(eventList, undefined, 4);
    console.log(eventList);
    console.log(str);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...