ОК, поэтому CodeIgniter - это фреймворк PHP - это означает, что он работает на стороне сервера. (Я знаю, там есть библиотека ajax, но я этим не пользуюсь.) Мы должны понимать разницу между серверной и клиентской сторонами. Ваш JavaScript-код на стороне клиента. Я обычно разрабатываю все без javascript для начала в codeigniter, затем возвращаюсь и добавляю биты javascript. Это помогает мне убедиться, что система работает для тех, у кого не включен javascript или по какой-либо причине невозможно выполнить javascript. (Кстати, это называется прогрессивное улучшение ).
Итак, во-первых, давайте позаботимся о не-JavaScript-версии:
Вам просто нужно дать вашей красной / зеленой кнопке URL при нажатии, который указывает на метод контроллера, который обновит запись базы данных и перенаправит вас обратно на страницу, на которой вы были ранее (на которой есть красные / зеленые кнопки).
/ controller / method.html - наш метод контроллера, который будет сохранять в базу данных и перенаправлять обратно на эту страницу. ->
<a href="/controller/method.html" class="red my-button">Check</a>
Теперь давайте позаботимся о версии js:
по вашему мнению, вам просто нужно перехватить щелчок, отправить запрос ajax и изменить красную / зеленую кнопку в зависимости от результата метода контроллера. Итак, мы не даем ссылку перенаправить страницу на атрибут href (e.prevendDefault ()). Затем мы получаем значение href и выполняем ajax-вызов этого метода контроллера. Метод определит, является ли это ajax-запросом, и сохранит его в базе данных, а затем вернет сообщение «success». На success
мы можем обновить визуальный компонент на стороне клиента.
$('.my-button').live('click', function(e) {
e.preventDefault();
$.ajax({
// $(this).attr('href') gets the value of the links href attribute
// which is "/controller/method.html" in this case
url: $(this).attr('href'),
success: function(data) {
// update your button with whatever html to write the new button
$('.my-button').replaceWith('<a href="/controller/method.html" class="red my-button">Check</a>');
}
});
});
Ваш метод контроллера просто проверяет, является ли это ajax-запросом или нет. Если это так, просто возвращает успех, если не перенаправляет страницу.
function my_controller_method()
{
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest") {
// update your database
echo "success";
}else{
// redirect back to page
redirect($_SERVER[‘HTTP_REFERER’]);
}
}