【问题标题】:AJAX database update with CSS button color change using Codeigniter使用 Codeigniter 通过 CSS 按钮颜色更改来更新 AJAX 数据库
【发布时间】:2012-01-23 05:16:30
【问题描述】:

我在这里看到了关于我正在尝试做的点点滴滴的好帖子,但没有涉及到所有领域。有没有人有任何代码示例或建议来帮助我做我想做的事情?

首先,我将使用一组数据构建我的 MVC 视图,例如 (org name, id, status),其中 status 是一个布尔值,可选择或未选择。但是,我想根据数据库值的状态显示一个特定的显示绿色(选中)或红色(未选中)按钮的特定复选框,而不是仅仅显示一个复选框。 CSS 不是问题。

然后,如果用户单击按钮,我想将 div 值从红色更改为绿色(反之亦然),同时通过 AJAX 调用更新数据库字段中的布尔值。最好尽可能利用 JQuery。

最后,我需要知道如何使用 CodeIgniter 来完成这一切。我精通 CI,但是 Javascript/JQuery 新手 - 此时头灯中的鹿。谁能指出我正确的方向或建议一个网站,其中包含一些与我正在尝试做的事情接近的示例代码或一个很好的资源而不是显而易见的?非常感谢。

【问题讨论】:

    标签: javascript css ajax codeigniter checkbox


    【解决方案1】:

    好的,所以 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’]);
        } 
    }
    

    【讨论】:

    • 太棒了!感谢您的时间和精力。我会检查一下并弄清楚代码在做什么。一旦我开始理解它,我会发回任何其他内容,这将有助于其他人也快速跟上进度。
    【解决方案2】:

    你想要的是竖起大拇指/喜欢的东西...链接中包含一个演示 http://www.geertdedeckere.be/lab/themeforest/thumbsup/demo/

    【讨论】:

    • 非常好的资源要记住。谢谢你。我把它加了书签。
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2023-03-16
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多