Javascript тянуть, чтобы обновить sh сохранить переменную LastID - PullRequest
0 голосов
/ 26 апреля 2020

Учитесь, пожалуйста, будьте добры, а не профессиональный кодер! Хорошо с PHP, но с Javascript Я полностью новичок ie.

tl; dr Как мне сохранить переменную last id от JSON, чтобы остановить мое AJAX вытягивание содержание, которое у него уже есть?

Пытаясь заставить работать 'pull down to refre sh', оно идет вперед, но я застрял. У меня mysql/php/ajax отлично. Я могу снести, и это обновляет. Но он продолжает добавлять существующий контент.

Я рассматривал присвоение переменных различными способами, используя let, var, nothing, window.variable. Используя Framework7, если это имеет какое-либо значение.

сегодня - это страница, а highid - это наибольшее число идентификатора, возвращаемое в JSON. когда вызывается get, highid присваивается mysql, чтобы получить что-то более новое. Часть PHP / JSON / AJAX работает. Но не могу найти способ установить переменную в следующий раз.

var html = '';

// Pull to refresh on Today tab
$$('.ptr-content').on('ptr:refresh', function (e) {

  setTimeout(function () {


 if (typeof today_highid === 'undefined') {
      var today_highid = 5;
    }
    app.request.json('/__php/json1.php', { article_id: today_highid }, function (data) {

      for(var i = 0; i < data['article'].length; i+=1){

         html+=
            '<div class="title-container">'+
            '<span class="title-date">Tuesday 19 March</span>'+
            '<h1>' +data['article'][i]['article_title']+ '</h1>'+
            '</div>'+
            '<a href="/single/">'+
            '<div class="card">'+
            '<img class="card-image" src="img/thumb-14.jpg" alt="">'+
            '<div class="card-infos">'+
            '<h2 class="card-title">' +data['article'][i]['article_content']+ '</h2>'+
            '<div class="card-bottom">'+
            '<div class="card-author">'+
            '<img class="card-author-image" src="img/authors/author-1.jpg" alt="">'+
            '<div>Camille Aline</div>'+
            '</div>'+
            '<div class="card-comments"><i class="f7-icons">chat_bubble_fill</i></i>' +today_highid+ '</div>'+
            '</div>'+
            '</div>'+
            '</div>'+
            '</a>';


      }
      //$$('.data-table table').html(tableHtml);
      // Prepend new list element
      $$('.ptr-content').find('#today-content').prepend(html);

      window.today_highid = data['status']['highid'];


    });

Любая помощь приветствуется или указывает на хороший рабочий учебник, пожалуйста и спасибо!

1 Ответ

1 голос
/ 27 апреля 2020

Проблема в том, что у вас есть window.today_highid = data['status']['highid'];, но вы устанавливаете значение var today_highid = 5 внутри функции. Который не то же самое. today_highid является собственностью window. Также, когда вы на самом деле используете его { article_id: today_highid }, вы просто ссылаетесь на var в области действия функции. Не значение window .today_highid`.

Вам необходимо переместить начальное значение из области действия функции. Проверьте ниже для ясности.

Также let равны const - переменные области блока. Вы никогда не должны использовать var больше. Это всегда либо let , либо const . Прочтите Javascript gotchas .

let todayHighId = 5; //default

$$('.ptr-content').on('ptr:refresh', function (e) {

  setTimeout(function () {

    app.request.json('/__php/json1.php', { article_id: todayHighId }, function (data) {

      let { article, status } = data; // I assume article is a property of data. So deconstruct the data object to get the properties
      let lastArticleId = article[article.length - 1]

      for(let i = 0; i < article.length i+=1){
       ....
      }

      todayHighId = status.highid;


    });
}

на заметку о том, что вы должны избегать объявления переменных с _ и доступа к свойствам объектов с помощью []. Я понимаю, что если API разработан таким образом, у вас нет выбора. Но этого следует избегать, если это не единственный выход.

...