J
J
jasonOk2016-04-21 13:55:23
JavaScript
jasonOk, 2016-04-21 13:55:23

What is this code for?

Clicking on the "Exit" button on the Toaster causes the following event :

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
    })
  }
}

Explain on your fingers what this code is for, and also why if I follow the link toster.ru/auth/sign_out it will not be what I expect at all (logout).
26268247f8e44e82904b7503379be7b6.png
In principle, everything is clear, but I ask you to clarify some guesses.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
D
Dmitry Kim, 2016-04-21
@jasonOk

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
    })
  }
}

... and also why if I follow the link toster.ru/auth/sign_out it will not be what I expect at all (logout).
This means that on the server, logging out of the account does not support the GET method. Otherwise, users could insert an image with a link into their posts, <img src="http://toster/sign-out">and after visiting this page, all users would automatically log out.

L
Lumore, 2016-04-21
@Lumore

Most likely this is for multi-authorization, but here the API in the backend from https://id.tmtm.ru/login/ is simply used , that is, through your account you can log in to all TM services

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question