好的,所以 CodeIgniter 是一个 PHP 框架 - 这意味着它可以在服务器端工作。 (我知道,那里有一个 ajax 库,但我不使用它。)我们必须了解服务器端和客户端之间的区别。您的 javascript 是客户端的。我通常在没有 javascript 的情况下开发所有东西,从 codeigniter 开始,然后返回并添加 javascript 位。这有助于我确保系统适用于那些没有打开 javascript 或出于任何原因无法执行 javascript 的用户。 (顺便说一句,这被称为progressive enhancement)。
所以,首先,让我们处理非 JavaScript 版本:
您只需要在单击时为您的红色/绿色按钮提供一个 url,该 url 指向将更新数据库记录并将您重定向回您之前所在的页面(具有红色/绿色按钮)的控制器方法。
/controller/method.html 是我们的控制器方法,它将保存到数据库并重定向回该页面。 -->
<a href="/controller/method.html" class="red my-button">Check</a>
现在,让我们处理一下 js 版本:
在您看来,您只需要劫持点击,发送 ajax 请求,并根据控制器方法的结果更改红色/绿色按钮。所以,我们要做的是阻止链接将页面重定向到 href 属性(e.prevendDefault())。然后,我们获取 href 的值并对那个控制器方法进行 ajax 调用。该方法将确定这是否是 ajax 请求并保存到数据库,然后回显“成功”消息。在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’]);
}
}