Выполнять 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
    });
});
Другие вопросы по тегам