@vydayko
Front-end dev

Можно ли попросить Вас о code review?

Доброе время суток.
Учусь, не могу найти ментора, напишите что не так, на что нужно обратить внимание и что подучить.
Сам код, работа с ajax, вывод постов, редактирование, удаление, добавление нового поста и добавление мыла. И если есть возможность помочь с histori API, а точнее с обработкой нажатия клавиш в браузере, потому-что то решение которое сделал я, костыль, а как исправить пока-что не знаю. Спасибо за помощь.
//очистка контента------------------------------------------------- 
function putContent(html){
    $('#hidden-content').html(html);
};
//очистка контента -------------------------------------------------

//работа с histori API-------------------------------------------------
function histori(elem, link, title){
    $(document).on('click', elem, function(event){
        event.preventDefault();

        $.ajax({
            url:      link,
            method:   'GET',
            dataType: 'HTML',
            success: function(html){
               history.pushState({}, title, link);
            }
        });
    });
};
// работа с histori API-------------------------------------------------


// выводит главный контент---------------------------------------------
function addMainContent(){
  $.ajax({
    url: 'view/main.html',
    type: 'GET',
    dataType: 'HTML',
    success: function (html) {
      $('#hidden-content').html(html);
    },
  });
};

addMainContent();
// выводит главный контент---------------------------------------------


$(document).ready(function(){
  // ссылка-------------------------------------------------------
  var api_url = 'http://tranquil-gorge-63456.herokuapp.com/';
  // ссылка-------------------------------------------------------

  // работа с histori API----------------------------------------
  histori('[data-action]', 'view/posts.html', 'Posts');
  histori('.addPost', 'view/addpost.html', 'AddPosts');
  // работа с histori API----------------------------------------

  // выводим все посты в footer----------------------------------
  function addAllPosts(){
    $.ajax({
      url:      api_url +'api/posts',
      method:   'GET',
      dataType: 'JSON',
      success:  function(res){
        $.each(res, function(index, val){
            var postsStr = '<p class="postItem" data-action="posts" data-id="'+ val._id + '">' + val.title + '</p>';
            $('.post').prepend(postsStr);
        });
      }
    });
  };
  addAllPosts();
  // выводим все посты в footer----------------------------------


  // выводим пост на отдельной страницe--------------------------
  $(document).on('click', '.postItem', function(event){
    event.preventDefault();
    var id = $(this).data('id');
    console.log(id);

    $.ajax({
      url:      api_url +  'api/posts/' + id,
      method:   'GET',
      dataType: 'JSON',
      success: function(res){
        putContent(' ');
        $('#hidden-content').append('<div class="container"> </div>');
        $('#hidden-content').find('.container').append('<div class="viewPost" data-id="' + id + '"></div>');
        var html = '<h1>' + res.title + '</h1>';
        html += '<p class="postContent">' + res.content + '</p>';
        html += '<input type="submit" style="margin-right: 20px;" class="editPost edThisPost" value="Редактировать">';
        html += '<input type="button" class="editPost delete" value="Удалить">';
        $(document).find('.viewPost').append(html);
      },
    });
  });
  // выводим пост на отдельной странице--------------------------

  // удаление поста----------------------------------------------
  $(document).on('click', '.delete', function(event){
    event.preventDefault();
    var id = $('.viewPost').data('id');
    $.ajax({
      url: api_url + 'api/posts/' +id,
      method: 'DELETE',
      success: function(res){
          putContent(' ');
          alert('Пост удален');
          $('#hidden-content').append('<div class="container"><a href="#" class="backToMain">Вернутся на главную страницу</a></div>');
      },
    });
  });
  // удаление поста----------------------------------------------


  //создание нового поста----------------------------------------
  $(document).on('click', '.addPost', function(event){
    event.preventDefault();
    $.ajax({
      url:      'view/addpost.html',
      method:   'GET',
      dataType: 'HTML',
      success: function(res){
          putContent(res);
      },
    });
  });
  $(document).on('click', '.addNewPost', function(event){
    event.preventDefault();
    var newTitle = $('.addTitle').val();
    var newContent = $('.addContent').val();
   
    $.ajax({
      url: api_url + 'api/posts',
      method: 'POST',
      data : {
          title: newTitle,
          content: newContent
      },
      success: function(res){
         alert('Вы добавили новую запись');
      },
    });
  });
  //создание нового поста----------------------------------------


  //add email----------------------------------------------------
  $(document).on('click', '.add-email', function(event){
    event.preventDefault();
    var personEmail = $('.email').val();
    $.ajax({
      url: api_url + 'api/newsletter',
      method: 'POST',
      data: {
          email: personEmail
      },
      success: function(){
          $('.email').val(' ');
          alert('Вы подписались на рассылку новостей');
      },
    });
  });

  //add email----------------------------------------------------


  //редактирования поста-----------------------------------------
  $(document).on('click', '.edThisPost', function(event){
      event.preventDefault();
      
      $('h1').after('<input type="text" class="editTitle">');
      $('.postContent').after('<input type="text" class="editContent"><br>');
      $('.edThisPost').replaceWith('<input type="submit" style="margin-right: 20px;" class="editPost  editThisPost" value="Сохранить">');
      
      $(document).on('click', '.editThisPost', function(){
        var editTitle = $('.editTitle').val();
        var editContent = $('.editContent').val();
        var id = $('.viewPost').data('id');
        $.ajax({
          url: api_url + 'api/posts/' + id,
          method: 'PUT',
          data: {
            title: editTitle,
            content: editContent
          },
          success: function(res){
            $('h1').replaceWith('<h1>' + res.title + '</h1>');
            $('.postContent').replaceWith('<p class="postContent">' + res.content + '</p>');
            $('.editTitle, .editContent').remove();
            $('.editThisPost').replaceWith('<input type="submit" style="margin-right: 20px;" class="editPost edThisPost" value="Редактировать">');
          },
        }); 
      });  
  }); 

  window.onpopstate = function(event) { 
    putContent();
    addMainContent();
    addAllPosts();
  };

});
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 3
index0h
@index0h
PHP, Golang. https://github.com/index0h
Общих рекомендаций 4:
1. Use ES 6 Luke!
2. Проверяйте входящие аргументы.
3. Не делайте макаронного кода:
$(document).on('click', '.add-email', function(event){

Привязка к событию отдельно, функция - отдельно.
4. Разделяйте код по классам. SOLID, вся херня.
Ответ написан
AlexXYZ
@AlexXYZ
O Keep Clear O
По мне так очень даже прилично написано, а у всех остальных свой опыт разработки. Лично мне не трудно было читать. Для удобства добавьте несколько скринов, чтобы было понятно о чём речь.
Ответ написан
trevoga_su
@trevoga_su
комментаторы выше - придираются

по коду - тут оценивать нечего. вообще.
набор стандартных вызовов api jquery
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы