Найти - Пользователи
Полная версия: [webpy] События при нажатии кнопок
Начало » Web » [webpy] События при нажатии кнопок
1 2
aspire89
Делаю робота. На raspberry pi запущен webpy с одной страничкой, на которой расположена дюжина кнопок. Как сделать, чтобы при нажатии на кнопки события обрабатывались, но страница не обновлялась?
Сейчас так, но обновляется страница.
        def GET(self):                
                return render.mytitle("Robot")
 
        def POST(self):
                i = web.input()
                if i.form_action == 'foo':
                    print 'yes'
                    return render.mytitle("Robot")
                else:
                    print 'no'
                    return render.mytitle("Robot")
Lexander
Использовать JavaScript на клиенте.
Ловите событие, гасите его (preventDefault), обмен с сервером - через AJAX.
aspire89
Lexander блин, ну как же не хотелось ajax юзать
Lexander
Ну, можно еще WebSocket :D
FishHook
aspire89
Lexander блин, ну как же не хотелось ajax юзать
Вот это зря, полюби аякс и он полюбит тебя.
Можно у формы target в невидимый iframe направить, не уверен насчет кроссбраузерности.
aspire89
FishHook это конечно хорошо, но я ни разу не веб разработчик, пока делаю этот проект, уже столько всего нового узнал про веб и похоже еще столько же придется узнать.
FishHook
aspire89
FishHook это конечно хорошо, но я ни разу не веб разработчик, пока делаю этот проект, уже столько всего нового узнал про веб и похоже еще столько же придется узнать.
Суть в том, что у формы есть необязательный атрибут target, в котором можно указать имя фрейма, в который будет помещен ответ сервера, который придет в ответ на запрос, который ваша форма отправит, когда нажмёте submit.
Если же этот атрибут не указан, то целевым фреймом считается сама страница и Вы наблюдаете эффект перезагрузки страницы. Если Вам важно только отправлять запросы, а ответы сервера не имеют значения, то можно сделать невидимый фрейм, в который мы и перенаправим все ответы.
Как то так
<iframe name="foo" id="foo" frameborder="0" style="display:none">
</iframe>
<form method="post" target ="foo">
<input type=submit name=submit value=button1>
<input type=submit name=submit value=button2>
</form>

Но это костыльное решение и использовать его не рекомендуют. Гораздо лучше выполнять такие действия асинхронно и делается это весьма просто.
Например с использованием JQuery
$.post('куда отправляем', {data: "Что отправляем"})
);
можно засунуть этот код в onclick каждой Вашей кнопки, а форма нам не нужна вообще.
<button onclick="$.post('куда отправляем', {data: "button1"})">Кнопка1</button>
<button onclick="$.post('куда отправляем', {data: "button2"})">Кнопка2</button>
aspire89
FishHook спасибо, только не понятно на какой url отправлять, и если вставить в тег кнопки onclick, то страница даже не грузится
    <table class="table" style="width:250px">
      <thead>
        <tr>
          <td>
            <button class="...." onclick="$.post('localhost:8080/formpage', {data: "button1"})">
              Button1
            </button>
          </td>
          <td>   <!-- сюда ссылается ошибка -->
            <button class=....
Вываливается
<type ‘exceptions.SyntaxError’> at /formpage
invalid syntax Template traceback: File ‘templates\\mytitle.html’, line 25 <td> (mytitle.html, line 25)
Lexander
FishHook
Но это костыльное решение и использовать его не рекомендуют.
К тому же, в некоторых браузерах будет отображаться процесс загрузки (в адресной строке).
Lexander
aspire89
Вываливается
Внутренние кавычки поставьте одинарные, как у первого аргумента $.post.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB