powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / асинхронность
34 сообщений из 34, показаны все 2 страниц
асинхронность
    #38663607
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, уже просто сломали голову. Есть такой кусок скрипта:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    $('#buttonArm').click(function() {
            $('#buttonArm').text("");
            $('#buttonArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object : objectz , DoArm : ''});
            document.getElementById('buttonArm').disabled = true;
            for(var i=0;i<10;i++)
            {
                //sleep(500);
                $.ajax({
                    url: "isRunning.php",
                    async: false,
                    type: "POST",
                    data: { object : objectz }
                })
                .done(function(data){
                        //dataz=data;
                       if (data=="0") {
                           location.reload();
                       }
                });
                //if (dataz=="0") location.reload();
            }
        });



То есть смысл такой, что мы посылаем пост запрос скрипту, и если скрипт отвечает ноликом, то перегружаем страницу, на деле все оказывается так:
выполняется сначала десять циклов, а после этого выполняется 10 раз функция done. Это хорошо видно под отладчиком. И соответственно уходит 10 запросов, хотя уже после первого обычно приходит нужный результат. Как сделать что-бы после первого успешного запроса, страница перегружалась? Пробовал отключить асинхронность, такая же фигня.
...
Рейтинг: 0 / 0
асинхронность
    #38663615
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983Подскажите, уже просто сломали голову.Надо было сначала учебник почитать, а не методом тыка голову ломать.
...
Рейтинг: 0 / 0
асинхронность
    #38663620
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо цикла нужен рекурсивные вызов POST запроса, если скрипт isRunning.php отвечает не ноликом.
...
Рейтинг: 0 / 0
асинхронность
    #38663670
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, да спасибо.Сразу разобрался и все написал как надо.
...
Рейтинг: 0 / 0
асинхронность
    #38663692
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983, не за что, вот мой вариант, если что:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<!DOCTYPE HTML>
<html>  
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
</head>  
<body>
  <button id="buttonArm">Click me...</button>
  <script>
    var objectz = {};
      
    $('#buttonArm').click(onArmClick);
      
    function askServer() {
      var called = arguments.callee.called || 0, deferred;
        
      if (called == 10) {
        onAskServerAttemptExceeded();
        return;
      }
        
      deferred = $.ajax({ data: { object: objectz }, type: "POST", url: 'demo_test_post.asp' });
      deferred.done(onAskServerDone);
        
      arguments.callee.called = called + 1;
    }
      
    function onArmClick(event) {        
      var sender = $(this);
        
      sender.text('Running...');
      sender.attr('disabled', 'disabled');
        
      askServer();
    }

    function onAskServerAttemptExceeded() {
      alert('The maximum number of attempts is exceeded!');
      location.reload();
    }
      
    function onAskServerDone(data) {        
      if (data == '0') {
        onAskServerSuccess();
      }
      
      askServer();        
    }

    function onAskServerSuccess() {
      location.reload();
    }
  </script>
</body>
</html>

Проверял тут .
...
Рейтинг: 0 / 0
асинхронность
    #38663706
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, у меня чуток попроще наверное получилось. Единственное нету проверки на количество обращений...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function isRunning()
    {
          $.ajax({
            type: 'POST',
            url: "isRunning.php",
            data: {object : objectz},
            success: function (data){
                if (data==0) location.reload();
                else isRunning();
            },
            error: function () {
                isRunning();
            }
        });
    }

    (function($)  {
        $('#buttonDisArm').click(function() {
            $('#buttonDisArm').text("");
            $('#buttonDisArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object : objectz , DoDisarm : ''});
            document.getElementById('buttonDisArm').disabled = true;
            isRunning();
        });
        $('#buttonArm').click(function() {
            $('#buttonArm').text("");
            $('#buttonArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object : objectz , DoArm : ''});
            document.getElementById('buttonArm').disabled = true;
            isRunning();
        });



Все верно??? При таком коде какие подводные камни могут встретится???
...
Рейтинг: 0 / 0
асинхронность
    #38663719
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983, простите, но у Вас не проще. У Вас лапшекод и дублирование.

Какие тут могут быть подводные камни? При таком стиле со временем код невозможно будет сопровождать.
...
Рейтинг: 0 / 0
асинхронность
    #38663800
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983skyANA, у меня чуток попроще наверное получилось. Единственное нету проверки на количество обращений...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function isRunning()
    {
          $.ajax({
            type: 'POST',
            url: "isRunning.php",
            data: {object : objectz},
            success: function (data){
                if (data==0) location.reload();
                else isRunning();
            },
            error: function () {
                isRunning();
            }
        });
    }

    (function($)  {
        $('#buttonDisArm').click(function() {
            $('#buttonDisArm').text("");
            $('#buttonDisArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object : objectz , DoDisarm : ''});
            document.getElementById('buttonDisArm').disabled = true;
            isRunning();
        });
        $('#buttonArm').click(function() {
            $('#buttonArm').text("");
            $('#buttonArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object : objectz , DoArm : ''});
            document.getElementById('buttonArm').disabled = true;
            isRunning();
        });



Все верно??? При таком коде какие подводные камни могут встретится???

Не знаю почему skyANA не понравился стиль написания... вроде нормально... только функцию isRunning надо переименовать, так как isSomething - это шаблонное имя для функций проверки на принадлежность чего-то к чему-то. Автоматически приходит ассоциация "наверное функция проверяет не запущено ли что-то".
А ещё обязательно objectz сделать аргументом функции :) А то перенесёшь код, забудешь что так сделал и будешь потом отлаживать... ладно 5-10 строк, а если код разрастётся до 100-200?
А ещё видишь как object подсветился... )) При большом количестве "неправильно" подсвеченного кода будет сложно в нём разобраться, потому такие ключи как object, Array, Boolean, instanceof лучше не использовать, или же использовать строго в кавычках (явно давая понять среде разработки что это строки).

Из подводных камней - это рекурсивное зацикливание, а также сокрытие ошибки и попытка выдать её как штатный процесс ожидания выполнения операции.
...
Рейтинг: 0 / 0
асинхронность
    #38663841
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, и почему же 'лапшекод'???

и вообще что за манера? я культурно интересуюсь...и вместо того чтобы аргументированно ответить, Вы предпочитаете некультурно что-то ляпнуть...даже читать не интересно...
...
Рейтинг: 0 / 0
асинхронность
    #38663845
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,

спасибо за совет.


Вот нормальный, развернутый ответ...все понятно и ясно...не то что некоторые отвечают...(ясно в чей огород камень)
...
Рейтинг: 0 / 0
асинхронность
    #38663882
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983skyANA, и почему же 'лапшекод'???

и вообще что за манера? я культурно интересуюсь...и вместо того чтобы аргументированно ответить, Вы предпочитаете некультурно что-то ляпнуть...даже читать не интересно...Почему не культурно? Я критикую код. Причём начинаю свою критику с "простите, но...".
...
Рейтинг: 0 / 0
асинхронность
    #38663893
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, критика это хорошо, но обосновать то нужно как то??
...
Рейтинг: 0 / 0
асинхронность
    #38663901
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрА ещё видишь как object подсветилсяэто здешний баг подсветки кода
11696509
...
Рейтинг: 0 / 0
асинхронность
    #38663915
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983, Ваш код не структурирован. Вы используете анонимные обработчики вместо осмысленно названных методов.

Это приведёт к тому, что код превратится в лапшу из вложенных в function() вызовов function() и сложно будет понять, а что он вообще делает.

Сами обработчики "толстые", в них смешана работы с DOM и вызовы сервера. Причём весь код обрабочиков дублируется.
Также Вы дублируете jQuery селекторы и смешиваете два подхода: использование JQuery селекторов и document.getElementById.
...
Рейтинг: 0 / 0
асинхронность
    #38663926
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983skyANA, критика это хорошо, но обосновать то нужно как то??Я на обед ходил. Обосновал.

P.S.: существуют статические анализаторы кода, например: JSLint. Советую воспользоваться.
...
Рейтинг: 0 / 0
асинхронность
    #38663936
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также не понятно, зачем дёргается $.get(). Другой разработчик посмотрит, не поймёт и удалит.
...
Рейтинг: 0 / 0
асинхронность
    #38663991
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=)
...
Рейтинг: 0 / 0
асинхронность
    #38664000
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, тот кто разрабатывает поймет, для чего дергается $.get
...
Рейтинг: 0 / 0
асинхронность
    #38664003
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, и вообще, с первого взгляда, понятнее мой код, чем Ваш. Зачем столько функций? Каждая состоит из 2-3 строк. Картинку же нарисовали...действительно безумие.
Конечно, если передавать это кому то другому, он не поймет ничего, но не из-за того что у меня как то не так написано, а из за того что создана библиотека для работы с ядром, а там действительно черт ногу сломит, но опять же не из за того что криво написано, а из зато того что продукт к которому пишется этот личный кабинет, нереально огромный и нереально сложный.

В любом случае я учту то что Вы сказали. Спасибо за критику :)
...
Рейтинг: 0 / 0
асинхронность
    #38664007
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAunname1983, Ваш код не структурирован. Вы используете анонимные обработчики вместо осмысленно названных методов.

Это приведёт к тому, что код превратится в лапшу из вложенных в function() вызовов function() и сложно будет понять, а что он вообще делает.

Сами обработчики "толстые", в них смешана работы с DOM и вызовы сервера. Причём весь код обрабочиков дублируется.
Также Вы дублируете jQuery селекторы и смешиваете два подхода: использование JQuery селекторов и document.getElementById.

1. Не согласен. Если обработчик востребован единожды, то намного удобнее его прописать прямо там, где требуется его выполнение. Исключение - очень длинные обработчики, но такое бывает очень редко и когда бывает, обычно случается так, что легче из обработчика вынести часть как отдельную функцию(-ии)

2. надо дёрнуть сервер, взять с него текст, по нему выбрать некий пункт в селекте, в зависимости от полученного текста дёрнуть другой сервер и полученным json'ом заполнить другой селект. Ну это к примеру. Получается надо как минимум 4 функции создавать?
А я в этом коде вижу всего несколько строчек кода ))
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//дёргаю первый сервер
$.ajax({
  type: "post",
  url: "dfsdfsdf.php",
  data: {data: data},
  success: function(answer){
    //выбираю опцию в селекте и дёргаю другой сервер
    $("#myselect").val(answer);
    if(data!=""){
      $.ajax({
        type: "post",
        url: "sdfsdfsdfsd.php",
        dataType: "json",
        success: function(answer){
          //заполняю второй селект нужными опциями
          var options = [];
          for(var val in answer){
            options.push("<option value='"+val+"'>"+answer[val]+"</option>");
          }
          $("#myselect2").html(options.join("\n"));
        }
      });
    }
  }
})



я вот о чём... средняя длина функции не должна составлять 6 строк )) Иначе тогда просто создаётся дефрагментированность кода, и он становится менее понятный и явный.

3. Ну думаю автор создал дублированность кода или по неопытности или в спешке. понятное дело что этот код можно выделить в отдельную функцию, заменив вызовы типа $('#buttonArm') на this. Однако я привык делать немного иначе. Я всёровно создаю анонимную функцию, а саму логику размещаю в именованной, однако в эту именованную функцию я отправляю готовые аргументы. Другими словами само событие (event) я обрабатываю на месте, а вот все действия выполняю в соответствующем методе. Очень часто это является удобно и полезно :)
...
Рейтинг: 0 / 0
асинхронность
    #38664070
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергей, гы, а картинка к чему? Намёк на то, что методы надо пересортировать?
...
Рейтинг: 0 / 0
асинхронность
    #38664071
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, чёрт, не туда одну стрелку нарисовал
...
Рейтинг: 0 / 0
асинхронность
    #38664073
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983skyANA, тот кто разрабатывает поймет, для чего дергается $.getА, кстати, для чего?
...
Рейтинг: 0 / 0
асинхронность
    #38664088
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрskyANAunname1983, Ваш код не структурирован. Вы используете анонимные обработчики вместо осмысленно названных методов.

Это приведёт к тому, что код превратится в лапшу из вложенных в function() вызовов function() и сложно будет понять, а что он вообще делает.

Сами обработчики "толстые", в них смешана работы с DOM и вызовы сервера. Причём весь код обрабочиков дублируется.
Также Вы дублируете jQuery селекторы и смешиваете два подхода: использование JQuery селекторов и document.getElementById.

1. Не согласен. Если обработчик востребован единожды, то намного удобнее его прописать прямо там, где требуется его выполнение. Исключение - очень длинные обработчики, но такое бывает очень редко и когда бывает, обычно случается так, что легче из обработчика вынести часть как отдельную функцию(-ии)Но страница-то у нас не обязательно состоит из одной лишь кнопки и действия пользователя не заканчиваются лишь нажиманием оной

Вон у автора блоком идёт подписка на клики по двум кнопкам. И получается жирный блок инициализации событий.
И каждый раз чтобы посмотреть, что происходит по нажатию на такую-то кнопку, приходится этот блок перечитывать.
Тогда как проще найти метод onЧтоТоТамClick. Особенно в IDE, потому как в IDE выводится список методов и можно быстро перейти к нужному.

Програмёр2. надо дёрнуть сервер, взять с него текст, по нему выбрать некий пункт в селекте, в зависимости от полученного текста дёрнуть другой сервер и полученным json'ом заполнить другой селект. Ну это к примеру. Получается надо как минимум 4 функции создавать?
А я в этом коде вижу всего несколько строчек кода ))
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//дёргаю первый сервер
$.ajax({
  type: "post",
  url: "dfsdfsdf.php",
  data: {data: data},
  success: function(answer){
    //выбираю опцию в селекте и дёргаю другой сервер
    $("#myselect").val(answer);
    if(data!=""){
      $.ajax({
        type: "post",
        url: "sdfsdfsdfsd.php",
        dataType: "json",
        success: function(answer){
          //заполняю второй селект нужными опциями
          var options = [];
          for(var val in answer){
            options.push("<option value='"+val+"'>"+answer[val]+"</option>");
          }
          $("#myselect2").html(options.join("\n"));
        }
      });
    }
  }
})

О, это яркий пример ниндзя кода. Мощные функции! .

Програмёр3. Ну думаю автор создал дублированность кода или по неопытности или в спешке. понятное дело что этот код можно выделить в отдельную функцию, заменив вызовы типа $('#buttonArm') на this.У него не только селекторы дублируются, у него весь код обработчиков дублируется.

P.S.: хотел бы я кстати знать, какой результат получится если нажать сначала на одну, а потом на другую кнопку.
...
Рейтинг: 0 / 0
асинхронность
    #38664110
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983skyANA, и вообще, с первого взгляда, понятнее мой код, чем Ваш.Это сейчас Вам понятно, когда Вы его только что написали.

А пройдёт полгода, Вам надо будет посмотреть (или кому-то другому), что происходит при нажатии на кнопку "Arm", и что Вы будете искать? Строку "$('#buttonArm').click(" в тексте?
А я быстро перейду к методу onArmClick.

А когда меня попросят изменить поведение, если произошла ошибка при запросе сервера (ну зачем его повторно опрашивать, нагружать, если он итак не может ответить), то я быстренько найду метод onAskServerError и поменяю его внутренности.
...
Рейтинг: 0 / 0
асинхронность
    #38664539
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, кнопка одна...она меняет свой id, в зависимости от некоторого значения....но это не меняет сути...

Програмёр, по поводу this спасибо, и неопытность и кратчайшие сроки :) исправлю в ближайший рабочий день...

обработчик действительно используется один раз, если интересно могу кинуть всю страницу...сайт разрабатывается в спешке, сроки минимальны, иногда код напоминает, код шестилетнего пьяного мальчика ;) разрабатывается двумя людьми, я и еще один человек, который большую часть времени перограммил на дельфях, я же больше люблю C и UNIX. Могу выложить...и даже готов собирать камни которые полетят в мое лицо ;)) хотя чего я спрашиваю, вот вся страница...сразу говорю сроки минимальны, и кривота иногда просто безумная...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
<?php
/**
 * Created by PhpStorm.
 * User: Крылов
 * Date: 14.02.14
 * Time: 16:22
 */
session_start();
require_once 'kernel/KernelAPI.php';
require_once 'Kernel/ObjectModel.php';
require_once "Layout/top-menu.php";
require_once "Layout/left-menu.php";

if (!KernelAPI::CheckUser()) {
    KernelAPI::Logout();
}
$objectCode = (int)isset($_POST["object"]) ? $_POST["object"] : $_GET["object"];
$objectModel = new ObjectModel($objectCode);
if (isset($_GET["DoDisarm"])) {
    $objectModel->Disarm();
    $referer = $_SERVER['HTTP_REFERER'];
    preg_replace("/DoDisarm/", "", $referer);
    exit;
 //   header("Location: $referer");
}
if (isset($_GET["DoArm"])) {
    $objectModel->Arm();
    $referer = $_SERVER['HTTP_REFERER'];
    preg_replace("/DoArm/", "", $referer);
    exit;
//    header("Location: $referer");
}
$info = KernelAPI::ClientInfo($_COOKIE['Sunros_id_us']);
if (!KernelAPI::CheckObject($objectCode)) {
    KernelAPI::Logout();
}
include_once("./Vendor/Pagination/Manager.php");
include_once("./Vendor/Pagination/Helper.php");

$paginationManager = new Krugozor_Pagination_Manager(7, 10, $_GET);
$paginationManager->setCount(KernelAPI::GetEventsCount($objectCode, true));
$paginationHelper = new Krugozor_Pagination_Helper($paginationManager);
$paginationHelper->setPaginationType(Krugozor_Pagination_Helper::PAGINATION_NORMAL_TYPE)
    // Устанавливаем CSS-класс каждого элемента <a> в интерфейсе пагинатора
    //->setCssNormalLinkClass("normal_link")
    // Устанавливаем CSS-класс элемента <span> в интерфейсе пагинатора,
    // страница которого открыта в текущий момент.
    //->setCssActiveLinkClass("active_link")
    ->setCssPreviousBlockClass("prev")
    ->setCssNextBlockClass("next")
    ->setStartBlock("<a ")
    ->setStopBlock("</a>")
    ->setCssNormalLinkClass("")
    ->setCssActiveLinkClass("active")
    // Параметр для query string гиперссылки
    ->setRequestUriParameter("object", $objectCode)
// Параметр для query string гиперссылки
//->setRequestUriParameter("param_2", "value_2")
// Устанавливаем идентификатор фрагмента гиперссылок пагинатора
//->setFragmentIdentif
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title><?=Config::$siteTitle?></title>
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript" src="js/script.js"></script>
    <script type="text/javascript" src="js/cufon-yui.js"></script>
    <script src="js/chosen.jquery.js" type="text/javascript"></script>
    <script src="js/prism.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" src="js/RodeoExtraBold_400.js"></script>
    <script type="text/javascript">
        Cufon.replace(".slogan p", {fontSize: '48px', color: '#fff'});
        Cufon.replace("#left h1", {fontSize: '48px', color: '#464646'});
    </script>

    <link rel="stylesheet" type="text/css" href="css/chosen.css" media="all"/>
    <link rel="stylesheet" type="text/css" href="css/style.css" media="all"/>
</head>
<body id="inner" class="interface">
<div id="main_wrap">
<?php
    $object = $_GET['object'];
    include Config::$layoutHeader;
    topMenu::getHTML("control", $object);
    $Object = $info["Objects"][$objectCode];
    $objectModel = new ObjectModel($object);
?>
<!-- таб меню -->
<?php $object_info = $info['Objects'][$objectCode]; ?>
<article id="content">
    <div class="box">
        <?php leftMenu::getHTML("control", "object",$object); ?>
        <!-- правая колонка -->
        <aside id="right">
            <div class="title"><span><?php echo $object_info['Purpose'] ?></span></div>
            <!-- данные о объекте -->
            <div class="more-block">
                   <table class="object inner">
                   <tbody>
                    <tr>
                        <td class="first adres">Название</td>
                        <td class="street br"><?php echo $object_info['Purpose'] ?></td>
                        <?php
                        if (!is_null($object_info["GSMLevel"])) {
                            print "<td class='lf'><label>Сеть GSM:</label>";
                            $gsm = $object_info['GSMLevel'];
                            for ($i = 0; $i < $gsm; $i++) {
                                print "<span class='ok'></span>";
                            }
                            while ($i != 5) {
                                print "<span class='ok off'></span>";
                                $i++;
                            }
                            print "<td class='bot'>" . ($battery = 0 ? "0" : $gsm * 20) . "%</td>";
                        }
                        ?>
                    </tr>
                    <tr>
                        <td class="first">Адрес:</td>
                        <td class="br"><?php echo $object_info['Address'] ?></td>

                    </tr>
                    <?php
                    echo "<tr>";
                        if ($objectModel->isControlable())
                        {
                        echo "
                            <td class='first'>Статус связи:</td>
                            <td class='br'>";
                            $Status = $object_info['IsOnline'] ? 'Online' : 'Offline';
                            echo "<span class='{$Status}'>$Status</span></td>";
                        }
                        if (!is_null($object_info['Temperature'])) {
                            $Temperature = $object_info['Temperature'];
                            print 'Температура:</td><td>{$Temperature} <sup>o</sup>C</td>';
                        } else {
                            //print '</td><td></td>';
                        }
                        echo "</tr>";
                    ?>
                    
                    <tr>
                        <td class="first">Статус обслуживания:</td>
                        <td class="br"><?= $info["DocStateName"] ?></td>
                        <td></td>
                        <td></td>
                    </tr>

                    <tr>

                        <td colspan="2" class="br">
                            <?php /*if ($objectModel->isControlable()) { */?>
<!--                            <a id="buttonDisArm" href="control.php?object=<?/*= $objectCode */?><?/*= $objectModel->secState() == ObjectSecStates::$Arm ? "&DoDisarm" : "&DoArm" */?>"
                               class="buttom-gray off"><img id="disArmed" src="images/off.png"alt=""/>--><?/*= $objectModel->secState() == ObjectSecStates::$Arm ? "Снять с охраны" : "Поставить на охрану" */?>
                            <!--</a>-->
                                <?php
                                if ($objectModel->isControlable()) {
                                    if ($objectModel->secState() == ObjectSecStates::$Arm)
                                        echo "<button id='buttonDisArm' class='buttom-gray off' ><img src='images/off.png'alt=''>Снять с охраны</button>";
                                    else
                                        echo "<button id='buttonArm' class='buttom-gray off'><img src='images/off.png'alt=''>Поставить на охрану</button>";
                                }
                                ?>

                               <a href="control.php?object=<?= $objectCode ?>" class="buttom-gray up"><img
                                    src="images/update.png" alt=""/>Обновить</a>
                            <div id="attemptError"></div>
            </div>
            </td>
            </table>
    </div>
    <!-- конец данных -->
    <div class="last-event">
        <div class="small-title">Актуальные события</div>
        <table class="event">
            <thead>
            <tr>
                <th colspan="2">Сегодня</th>
            </tr>
            </thead>
            <tbody>
            <?php
            if ($paginationManager->getCount() == 0) {
                print "<td>Актуальных событий нет</td>";
            } else {
                //Krugozor_Pagination_Manager::printEvent($object, $paginationManager);
                $Events = KernelAPI::GetEventsQuery($object, $paginationManager->getStartLimit(),
                    $paginationManager->getStopLimit(), true);
                while ($row = sqlsrv_fetch_array($Events, SQLSRV_FETCH_ASSOC)) {
                    $dt = date_format($row["DT"], "d.m.y, в H:i:s");
                    print "
                                    <tr>
                                        <td class='date'>{$dt}</td>";
                    switch ($row["GroupID"]) {
                        // Красный значок
                        case ObjectEventTypesIDs::$Alarm:
                            $img = "images/warning4.png";
                            break;
                        case ObjectEventTypesIDs::$Arm:
                            $img = "images/warning2.png";
                            break;
                        case ObjectEventTypesIDs::$Disarm:
                            $img = "images/warning.png";
                            break;
                        case ObjectEventTypesIDs::$Failure:
                            $img = "images/warning3.png";
                            break;
                        case ObjectEventTypesIDs::$PowerControl:
                            $img = "images/lol.png";
                            break;
                        case ObjectEventTypesIDs::$Service:
                            $img = "images/ho.png";
                            break;
                    }
                    echo "<td><img class='icon' src='{$img}' alt='' />{$row["EventName"]}</td>";

                    print "</tr>";
                }
            }
            ?>
            </tbody>
        </table>
        

        <div>
            <?php
                $actualEvents = $paginationHelper->getPagination()->getCount();
                if ($actualEvents > 0)
                {
                    echo "Всего событий сегодня: {$actualEvents}</strong>";
            ?>
                <br/><br/>
            <?php
                if ($actualEvents > 7)
                {
                    echo "<ul class='pager-item'>".$paginationHelper->getHtml()."</ul>";
                }
            ?>


                <!--<ul class="pager-count">

                            <li class="prev">Показывать:</li>
                            &nbsp;<li <?php //echo $eventsToShow = 10 ? "" : ""; echo " href='{$_SERVER["REQUEST_URI"]}&toShow=10'"; ?>>10</li>
                            &nbsp;<li>30</li>
                            &nbsp;<li class="next">Все</li>
                        </ul>-->
            <?php } ?>

        </div>
    </div>
    </aside>
    </div>
</article>
<div id="zaglushka"></div>
</div>
<?php include Config::$layoutFooter ?>

<script type="text/javascript">
    var attempt=0;
    var objectz = <? echo $object?>;
    function getCookie(name) {
        var matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
         ));
        return matches ? decodeURIComponent(matches[1]) : undefined;
    }

    function sleep(ms) {
        ms += new Date().getTime();
        while (new Date() < ms){}
    }

    function isRunning(obj)
    {
          $.ajax({
            type: 'POST',
            url: "isRunning.php",
            data: {object: obj},
            success: function (data){
                if (data==0) location.reload();
                else isRunning(obj);
            },
            error: function () {
                isRunning(obj);
            }
        });
    }

    (function($)  {
        $('#buttonDisArm').click(function() {
            $('#buttonDisArm').text("   ");
            $('#buttonDisArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object: objectz , DoDisarm : ''});
            document.getElementById('buttonDisArm').disabled = true;
            isRunning(objectz);
        });
        $('#buttonArm').click(function() {
            $('#buttonArm').text("");
            $('#buttonArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
            $.get('control.php',{object: objectz , DoArm : ''});
            document.getElementById('buttonArm').disabled = true;
            isRunning(objectz);
        });
    }) (jQuery);
</script>
...
Рейтинг: 0 / 0
асинхронность
    #38664540
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жду критику по поводу говнокода и "лапшекода", признаться данное выражение услышал впервые...
...
Рейтинг: 0 / 0
асинхронность
    #38664565
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983признаться данное выражение услышал впервые...В оригинале - spaghetti code. Можете загуглить.
...
Рейтинг: 0 / 0
асинхронность
    #38664568
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983, если Вы используете PhpStorm, то обратите для начала внимание на результаты его анализа кода.
...
Рейтинг: 0 / 0
асинхронность
    #38664584
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983Жду критику по поводу говнокода и "лапшекода"...Ну весь PHP код я критиковать не буду, некогда.

Просто посоветую посмотреть в сторону какого-нибудь PHP MVC фреймворка: Yii, или Kohana.

А вот этот кусок:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
<?php
if ($objectModel->isControlable()) {
    if ($objectModel->secState() == ObjectSecStates::$Arm)
        echo "<button id='buttonDisArm' class='buttom-gray off' ><img src='images/off.png'alt=''>Снять с охраны</button>";
    else
        echo "<button id='buttonArm' class='buttom-gray off'><img src='images/off.png'alt=''>Поставить на охрану</button>";
}
?>


я бы для начала переписал так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?php
if ($objectModel->isControlable()) {
    $armed = $objectModel->secState() == ObjectSecStates::$Arm;
    $className = $armed ? 'off' : 'on';
    $imageName = $armed ? 'off.png' : 'on.png';

    echo '<button id="buttonChangeSecurityState" class="buttom-gray '.$className.'" data-armed="'.$armed.'">';
    echo '<img alt="" src="images/'.$imageName.'"/>';
    echo $armed ? 'Снять с охраны' : 'Поставить на охрану';
    echo '</button>';
}
?>


А этот:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
(function($)  {
    $('#buttonDisArm').click(function() {
        $('#buttonDisArm').text("   ");
        $('#buttonDisArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
        $.get('control.php',{object: objectz , DoDisarm : ''});
        document.getElementById('buttonDisArm').disabled = true;
        isRunning(objectz);
    });
    $('#buttonArm').click(function() {
        $('#buttonArm').text("");
        $('#buttonArm').append("<img src='/images/spin.GIF'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>");
        $.get('control.php',{object: objectz , DoArm : ''});
        document.getElementById('buttonArm').disabled = true;
        isRunning(objectz);
    });
}) (jQuery);


сяк:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
function onChangeSecurityStateClick() {
    var actionName, data = {}, sender = $(this), armed = sender.data('armed');

    // Lock interface element
    sender.text('   ');
    sender.append('<img src="/images/spin.GIF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выполнение</img>');
    sender.attr('disabled', 'disabled');

    // Do some magic on the server to change the security state...
    actionName = armed ? 'DoDisarm' : 'DoArm';

    data[actionName] = '';
    data['object'] = objectz;

    $.get('control.php', data);

    // ... and monitor this process
    isRunning(objectz);
}

(function($)  {
    $('#buttonChangeSecurityState').click(onChangeSecurityStateClick);
}) (jQuery);
...
Рейтинг: 0 / 0
асинхронность
    #38664586
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается Вы инициируете процесс смены состояния безопасности GET запросом, а мониторите POST.

Забавно, а почему не наоборот?
А что, если пользователь нажмёт F5, или другой в это время (пока состояние меняется), зайдёт на страницу, и нажмёт кнопарь?
...
Рейтинг: 0 / 0
асинхронность
    #38664643
unname1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, да Ваше решение конечно более красивое и изящное, обязательно учту и подправлю...
по поводу GET и POST, все пишется в спешке, не помню уже почему так, скорее для быстрой отладки использовался GET запрос, а после, просто или забыли или не стали менять...так как заказчики ждут этот проект, не до изящности кода...потом то конечно надеемся перелопатить весь код(писать быстро это желание начальства, никакие проверки им нафиг не нужны, начальству нужно просто поскорее получить готовый продукт, а на безопасность в данном случае можно забить...конечно не полностью, элементарная безопасность реализована...)
проверки на пользователей стоят очень жесткие, и если какой то другой пользователь тыкнет кнопку его сразу выкинет.
...
Рейтинг: 0 / 0
асинхронность
    #38664647
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983так как заказчики ждут этот проект, не до изящности кода...потом то конечно надеемся перелопатить весь код(писать быстро это желание начальства, никакие проверки им нафиг не нужны, начальству нужно просто поскорее получить готовый продукт, а на безопасность в данном случае можно забить...При таком подходе косяки потом правятся дольше, чем если бы сразу писали грамотно. А "потом то конечно надеемся перелопатить весь код" никогда не наступает
...
Рейтинг: 0 / 0
асинхронность
    #38664649
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unname1983проверки на пользователей стоят очень жесткие, и если какой то другой пользователь тыкнет кнопку его сразу выкинет.А если боты начнут GET-ом дёргать сервер?
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / асинхронность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]