Skip to content

Instantly share code, notes, and snippets.

@elvisgiv
Last active April 22, 2016 12:03
Show Gist options
  • Save elvisgiv/83911a883328d3fe0eee7fe32a06e8b6 to your computer and use it in GitHub Desktop.
Save elvisgiv/83911a883328d3fe0eee7fe32a06e8b6 to your computer and use it in GitHub Desktop.

JQuery разбор кода

../maintenance_controller.rb
class Admin::MaintenanceController < Admin::MyAdminBaseController
  def rake_docs_rebuild
    ...some code here...
    respond_to do |format|
      format.html {
      }
      format.json{
        render :json=>{:res=> 1, :output => a}
      }
    end
  end
end  
../view/maintenance/index.html
...some code here...
%h2 Commands

%ul.list-inline#commands
  %li=link_to 'rebuild docs', '#', :class=>'btn btn-primary btn-sm', :"data-name"=>'command', :"data-cmd"=>'rake_docs_rebuild'
  %li=link_to 'pull ansible', '#', :class=>'btn btn-primary btn-sm', :"data-name"=>'command', :"data-cmd"=>'pull_ansible'

#status_commands.bg-info.well

:javascript
  // commands
  $( '#commands a[data-name="command"]' ).click(function() {
    //$('#status_commands').html("Handler for .click() called." );
    send_command($(this).data('cmd'));
  });

  function send_command(cmd){
    $('#status_commands').html("Sending...");

    $.ajax({
      url: "/cmsadmin/maintenance/" + cmd,
      data: {},
      type: "GET",
      dataType: "json",
      contentType: "application/json",
      beforeSend: function(){
        // Handle the beforeSend event
      },
      success: function(res_data){
        $('#status_commands').html("Result: "+ res_data.output );
      },
      complete: function (res_data) {
      }
    });
  }

$( '#commands a[data-name="command"]' ) - это jquery селектор, возвращает массив линков, которые лежат внутри слоя #commands и сам линк с атрибутом data-name="command"

.click(function() { - это привязывает обработчик события к событию "нажмите кнопку" событие JavaScript, или вызывает данное событие на элемент. (function(){ - Функция для выполнения каждый раз, когда вызывается событие.

send_command($(this).data('cmd')); }); - это вызов своего метода с параметром $(this) (это конкретный линк из возвращаемого массива линков) к которому применяем метод .data('cmd') (который возвращает значение по ключу data-cmd для линка)

function send_command(cmd){ - это объявление своей функции, которую мы вызываем выше с уже найденым нами параметром ($(this).data('cmd') в коде выше, вернул нам значение, которое мы и подставили при объявлении своей функции в cmd)

$('#status_commands').html("Sending..."); - это изменение содержимого HTML-элемента

$.ajax({ - это вызов Ajax запроса, который принимает на вход параметры хеша ключ-значение. Все элементы, которые находятся ниже, являются его параметрами. Подробнее о параметрах см. здесь http://api.jquery.com/jQuery.ajax/

url: "/cmsadmin/maintenance/" + cmd, - это Строка, содержащая URL, к которому направляется запрос.

data: {}, - это данные, которые будут отправлены на сервер. Они преобразуется в строку запроса, если еще не строка. Они добавляются к URL для GET-запросов. Принимает ключ-значение, например data: { "name": "Dan" }

type: "GET", - это, как и method:, метод HTTP, используемый для запроса ("POST", "GET", "PUT").

dataType: "json", - это тип данных, которые вы ожидаете от сервера.

contentType: "application/json", - это при передаче данных на сервер, использовать этот тип контента - спросить у макса конкретнее

beforeSend: function(){// Handle the beforeSend event}, - это обработчик, который может изменять объект перед его отправкой на сервер.

success: function(res_data){
  if(cmd == 'import_index') {
    $('#status_commands').html("Result: "+"everything is indexed");
    }
  else if (cmd == 'pull_ansible') {
    $('#status_commands').html("Result: "+res_data.output);
    }
},

success: - это обработчик, который вызывается, если запрос выполнен успешно. res_data в function(res_data){ - это захэшированные данные, которые возвращаются из контроллера render :json=>{:res=> 1, :output => a}, добраться до которых можно так res_data.output

complete: function (res_data) { } - это обработчик - вызывается при любом ответе от сервера - успешном или нет

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment