LINUX.ORG.RU

Не работает кнопка


0

0

Доброго времени суток.

Странное дело: при клике мышой по кнопке не выполняется связанный с ней скрипт (ошибка script not found or unable to stat в логах апача), а если скрипт и параметры прописывать напрямую в адресной строке браузера - все работает.
Может что с описанием кнопки накосячил?
HTML код кнопки: <INPUT type="button" name="Включить" value="Включить" title="Включить" onclick="/cgi-bin/radio?72.25">

Почему не работает кнопка?
Сеньк.

ЗЫ скрипт вызывает fm-tools с нужными параметрами

C onclick="location.href='/cgi-bin/radio?70.65'" работает, но мне не надо переходить по сслылке, а нужно просто выполнить скрипт

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

> C onclick="location.href='/cgi-bin/radio?70.65'" работает, но мне не надо переходить по сслылке, а нужно просто выполнить скрипт

По onclick выполняется только JavaScript, серверный скрипт может выполниться только или в результате инициации перехода по ссылке (как написано), или в результате AJAX-вызова. Других вариантов нет.

eugine_kosenko ★★★
()
Ответ на: комментарий от Mousehouse

> А можно ли как-либо замаскировать переход по ссылке, чтобы страничка с кнопками не пропадала?

Ну, в классике скрипт после исполнения просто должен вернуть html-код той же страницы, с которой он был вызван. То есть, страница перезагружается, но остается той же. На хороших каналах при нормальной работе кэша это практически незаметно.

Собственно, логика тут в том, что скрипт при разумном ходе событий должен вернуть какие-то результаты, хотя бы сообщение типа "Выполнено успешно" или "Произошла ошибка", и на этой странице обычно ставят гиперссылку "Вернуться на основную страницу".

Можно еще открывать скрипт в новом окне типа JS-вызова open_window с указанием для него URL вызова. Тогда скрипт выведет результаты работы в новое окно, и пользователю можно предложить просто закрыть его. Или вставить в код возвращаемой страницы принудительное закрытие окна сразу после загрузки страницы, если результат работы скрипта неважен.

Кстати, с тем же успехом можно втыкнуть в код результата редирект на главную страницу, если не хочется открывать нового окна.

По любому, это будет заметно для пользователя. Абсолютно тихо это можно сделать только с помощью AJAX.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

> Абсолютно тихо это можно сделать только с помощью AJAX.
Еще можно картинку подгрузить.

Deleted
()
Ответ на: комментарий от Deleted

> Еще можно картинку подгрузить.

По нажатию на кнопку? Тогда ее придется еще динамически создать в DOM... Даже не знаю, получится ли, грузятся ли картинки при создании соответствующего элемента?

eugine_kosenko ★★★
()
Ответ на: комментарий от Deleted

Для этого даже не нужно элемент включать в тело страницы :)

Deleted
()

не проще <form action="/cgi-bin/radio?72.25"> прописать? а кнопку type="submit".

anonymous
()

Эх. Растрогал старика. (Утирает слёзы)

Прям сразу молодость вспомнилась. Когда сам был молодым долбоёбом...

Miguel ★★★★★
()

Если нужно надежно, то правильный способ - отдавать из скрипта, обрабатывающего нажатие (и идти на него надо просто по href=""), 302 обратно на показываемую страницу. Иначе - грузить картинку либо JS-код.

anonymous
()
Ответ на: комментарий от anonymous

Пытаюсь сделать по первому способу.
Включение/выключение станций работает, но никак не сделаю перенаправление. Сейчас перловый скрипт выглядит так:

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<HTML><HEAD></HEAD><BODY>";

$fm = `/usr/bin/fm`;
exec "fm @ARGV";

print 'Status: 302 Moved', "\r\n", 'Location: http://192.168.0.2/radio/index.html', "\r\n\r\n";

print "</BODY></HTML>";

Где ошибка?

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Поместил перенаправление в заголовок html - теперь оно выводится на открывающейся странице вместе с выводом fm-tools, ничего естественно не перенаправляется. Всю голову уже сломал.

Help please!

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Заголовки у тебя здесь закончились:
print "Content-type: text/html\n\n";
                              ^^^^

Следовательно, все заголовки, которые ты выводишь после,
работать не будут.

Deleted
()
Ответ на: комментарий от Deleted

Сделал так:

#!/usr/bin/perl
print "Content-type: text/html; 'Status: 302 Moved', 'Location: http://192.168.0.2/radio/index.html',\n\n";
print "<HTML><HEAD>";
print "</HEAD><BODY>";

$fm = "/usr/bin/fm -q";
exec "fm @ARGV";

print "</BODY></HTML>";

Не перенаправляет на исходную страницу!!
Кстати, ключ -q тоже игнорируется, но это не так важно.

Как сделать чтоб перенаправление работало, ОГРОМНАЯ просьба разжевать, для особо одаренных:) пока мозги совсем не выкипели...

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

C ключом ключ -q разобрался, остался вопрос с перенаправлением на исходную страницу... ууу... мозги пухнут...

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

> print "Content-type: text/html; 'Status: 302 Moved', 'Location: http://192.168.0.2/radio/index.html',\n\n";

Ужас какой :)


Ты понимаешь что такое HTTP-заголовки?
Это набор значений, который выглядит так:
--------------------------------------------
key1: value1
key2: value2
key3: value3

content
--------------------------------------------

А у тебя выводится вот что:
--------------------------------------------
Content-type: text/html; 'Status: 302 Moved', 'Location: http://192.168.0.2/radio/index.html',

content
--------------------------------------------

А должно быть:
--------------------------------------------
Content-type: text/html
Status: 302 Moved
Location: http://192.168.0.2/radio/index.html

content
--------------------------------------------

Кстати Content-type тут не нужен. И все что идет
после заголовков тоже.

Deleted
()
Ответ на: комментарий от Deleted

О!!! Начинает получаться!!

Скрипт получился такой:
#!/usr/bin/perl
print "Content-type: text/html";
print "Status: 302 Moved";
print "'Location: http://192.168.0.2/radio/index.html',\n\n";
print "<HTML><HEAD>";
print "</HEAD><BODY>";

$fm = "/usr/bin/fm -q";
exec "$fm @ARGV";

print "</BODY></HTML>";

Если убрать Content-type, то перенаправление не срабатывает.
Только, не пойму, почему браузер каждый раз выводит сообщение "Вы собираетесь открыть файл radio, являющийся text/htmlstatus, ну и далее предлагает открыть/сохранить его. Странно, откуда это вязлось и как убрать?

Спасибо!

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Файл radio содержит внутри только <HTML><HEAD></HEAD><BODY>.

Убрал в скрипте эти строки, осталось только:
#!/usr/bin/perl
print "Content-type: text/html";
print "Status: 302 Moved";
print "'Location: http://192.168.0.2/radio/',\n\n";

$fm = "/usr/bin/fm -q";
exec "$fm @ARGV";

Но почему-то браузер все равно предлагает открыть или сохранить файл radio

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Оператор print в perl не печатает перевод строки.
Тоесть все заголовки сливаются в одну строку все равно.
Поэтому браузер видит Content-type: text/htmlStatus...
А раз он не знает такого типа, то он и не знает что с ним делать и
предлагает сохранить.
Короче добавить недостающий \n в конце каждой строки.

Deleted
()
Ответ на: комментарий от Deleted

Ну что ты будешь делать...:(

Сделал так:
#!/usr/bin/perl
print "'Content-type: text/html',\n";
print "'Status: 302 Moved',\n";
print "'Location: http://192.168.0.2/radio/index.html',\n\n";

$fm = "/usr/bin/fm -q";
exec "$fm @ARGV";

Теперь сообщение про "открыть/сохранить" не выводит, но и перенаправление не работает

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Шутник :)
Что за апострофы??? Зачем?????? Ты понимаешь, что выводится
всё, что находится между крайними кавычками?

print "Content-type: text/html\n";
print "Status: 302 Moved\n";
print "Location: http://192.168.0.2/radio/index.html\n\n";

А если уж перечислять параметры через запятую, то так:
print "Content-type: text/html","\n";
print "Status: 302 Moved","\n";
print "Location: http://192.168.0.2/radio/index.html","\n\n";

Или так (из особой любви к одиночным кавычкам):
print 'Content-type: text/html',"\n";
print 'Status: 302 Moved',"\n";
print 'Location: http://192.168.0.2/radio/index.html',"\n\n";

Только вот смысла никакого.

Deleted
()
Ответ на: комментарий от Deleted

УРА! Работает!! Спасибо огромное!!!

Теперь у меня есть радио с веб-управлением:)
Работает все как надо, страничка перезагружается быстро и незаметно.

Надо будет сделать еще проверку параметров, передаваемых скрипту, и закладочек навставлять, чтоб страница верх не съезжала, тогда все будет совсем шоколадно...

Mousehouse
() автор топика
Ответ на: комментарий от isden

Конечно таки лучше. Проблема в том, что он не знает простейших вещей.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.