Выполнять CGI каждый раз при нажатии кнопки без изменения текущей HTML-страницы
Я начинаю свою стажировку на домашнем сервере, способном управлять множественным оборудованием с веб-страницы. Глобальная идея заключается в том, что на основе нажатия на кнопку на сервере создается определенный сценарий, который управляет микроконтроллером.
Мой преподаватель создал простой веб-сайт, который он мне дал, используя AJAX, чтобы всегда оставаться на 1 странице, и выводит меню в соответствии с действиями пользователя (они скрыты, если не используются, возвращаются на передний план, если используются).
Я настроил сервер Apache, который я настроил для выполнения сценариев CGI, и он работает. Чтобы всегда оставаться на одной странице, я использовал трюк с возвратом "204 Нет содержимого", так что ответ сервера на страницу "Мне нечего сказать, просто оставайтесь на этой странице".
Но у меня есть одна проблема - CGI запускается только один раз. Если я нажимаю кнопку в первый раз, она работает, потом ничего не происходит.
Я попытался использовать SSI (shtml), чтобы использовать код кнопки вместо использования FORM с методом GET, но скрипт все равно не будет выполнен дважды.
Я мог бы использовать неправильные инструменты. Должен ли я продолжать идти с CGI? Или есть что-то еще (например, AJAX, jquery), которое на самом деле предназначено для того, чтобы делать то, что я хочу?
Спасибо, что прочитали.
РЕДАКТИРОВАТЬ: я нашел способ обойти это (всегда, когда я в отчаянии после нескольких дней искать ответ, я иду на форумы, а затем найти себе хорошее решение в течение следующего часа....) Я использовал основную ссылку и по какой-то причине он ведет себя иначе, чем при использовании кнопки. Без разницы. Мои допросы по используемым технологиям все еще стоят, хотя:)
РЕДАКТИРОВАТЬ 2: Мое решение дрянное, по какой-то причине сценарий также вызывается при обновлении страницы (или при первой загрузке страницы). Это странно, потому что, поскольку он в нем, он должен появляться только тогда, когда я нажимаю на него...
1 ответ
Ознакомьтесь с jQuery и его AJAX API. Вы не можете заставить его не загружать новую страницу, если вы не используете AJAX. Вот пример того, как выглядит вызов AJAX:
$.ajax({
url: 'http://server.domain.com/cgi-bin/myfile.cgi',
data: {
x: 1,
today: '20110504',
user: 'Joe'
}
}).success(function(data, status, xhr) {
if (data)
alert(data);
});
Это для jQuery 1.5 или выше. Вы можете запустить это всякий раз, когда определенная кнопка нажимается следующим образом:
HTML для кнопки:
<input type="button" id="doThis"/>
JavaScript:
$(function() {
$('#doThis').click(function() {
//put AJAX sample shown above, here
});
});