Задать вопрос
jasonOk
@jasonOk
Легче болтать, чем код писать

Для чего предназначен этот код?

На Тостере по клику на кнопку "Выход" стоит следующее событие:
function(e) {
  e.preventDefault();
  $(this).addClass("loading");
  var confirm_text = $(this).data("confirm") || false;
  var method = $(this).data("method") || "get";
  var url = $(this).attr("href");
  var post_data = {};
  if (method == "post") {
    for (var i in $(this).data()) {
      if (i.indexOf("post") === 0) {
        post_data[i.replace(/^post/, "").toLowerCase()] = $(this).data(i)
      }
    }
  }
  var send = true;
  if (confirm_text) {
    if (confirm(confirm_text)) {
      send = true
    } else {
      send = false
    }
  }
  if (send) {
    $.ajax({
      url: url,
      cache: false,
      dataType: "script",
      type: method,
      data: post_data
    })
  }
}

Объясните на пальцах, для чего предназначен этот код, а также почему если я перейду по ссылке toster.ru/auth/sign_out будет совсем не то, что я ожидаю (выход из аккаунта).
26268247f8e44e82904b7503379be7b6.png
В принципе всё ясно, но прошу уточнить некоторые догадки.
  • Вопрос задан
  • 578 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
kimono
@kimono
Web developer
function(e) {
  // отменяем привычное действие ссылки
  e.preventDefault();
  // добавляем класс loading
  $(this).addClass("loading");
  // переменной confirm_text присваиваем атрибут ссылки "Выход" с именем data-confirm или false
  var confirm_text = $(this).data("confirm") || false;
  // переменной method присваиваем атрибут ссылки "Выход" с именем data-method или get
  var method = $(this).data("method") || "get";
  // берем адрес ссылки для выхода
  var url = $(this).attr("href");
  // создаем пустой объект, будем использовать его для отправки данных на сервер
  var post_data = {};
  // если метод отправки = post, пробегаемся по всем атрибутам "data-post" ссылки "Выход" и заносим их значения с маленькой буквы в наш объект
  if (method == "post") {
    for (var i in $(this).data()) {
      if (i.indexOf("post") === 0) {
        post_data[i.replace(/^post/, "").toLowerCase()] = $(this).data(i)
      }
    }
  }
  var send = true;
  // если у нас задан атрибут confirm_text (по всей видимости это alert-сообщение типа "Вы уверены что хотите выйти?"), то проверяем нажал ли пользователь "Да"
  if (confirm_text) {
    if (confirm(confirm_text)) {
      send = true
    } else {
      send = false
    }
  }
  // Если пользователь нажал "Да" или атрибут confirm_text не задан, то отправляем данные на сервер
  if (send) {
    $.ajax({
      url: url,
      cache: false,
      dataType: "script",
      type: method,
      data: post_data
    })
  }
}



... а также почему если я перейду по ссылке toster.ru/auth/sign_out будет совсем не то, что я ожидаю (выход из аккаунта).

Значит на сервере выход из аккаунта не поддерживает метод GET. Иначе, пользователи могли бы вставить в посты изображение со ссылкой <img src="http://toster/sign-out"> и после захода на эту страницу все пользователи автоматом разлогинивались.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lumore
@Lumore
Front-end developer
Скорее всего это для для мульти-авторизации, а здесь просто используется API в бэкенде от https://id.tmtm.ru/login/, то есть через ваш аккаунт можно авторизоваться на всех сервисах TM
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы