powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / асинхронность
9 сообщений из 34, страница 2 из 2
асинхронность
    #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
9 сообщений из 34, страница 2 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / асинхронность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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