Php CodeIgniter:AJAX和JSON的问题

Php CodeIgniter:AJAX和JSON的问题,php,jquery,ajax,json,codeigniter,Php,Jquery,Ajax,Json,Codeigniter,我试图在CodeIgniter中使用AJAX和JSON。我以前从未使用过这两种技术,但我开始掌握它了 以下是我想要达到的目标 在我的网站上,用户可以“喜欢”论坛上其他用户的帖子。我希望love链接旁边的计数器能够使用AJAX和JSON自动更新 以下是相关代码: 视图: 一个简单的HTML链接,用于将爱情添加到计数中 <p><a href="#" class="love"><?php if ($post->love) { echo $post->love;

我试图在CodeIgniter中使用AJAX和JSON。我以前从未使用过这两种技术,但我开始掌握它了

以下是我想要达到的目标

在我的网站上,用户可以“喜欢”论坛上其他用户的帖子。我希望love链接旁边的计数器能够使用AJAX和JSON自动更新

以下是相关代码:

视图: 一个简单的HTML链接,用于将爱情添加到计数中

<p><a href="#" class="love"><?php if ($post->love) { echo $post->love; } else { echo 0; } ?></a></p>
控制器: 单击链接时Ajax调用的函数

public function love_forum_post()

{

$post_id = $this->input->get('post_id');
$user_id = $this->input->get('user_id');
$is_ajax = $this->input->get('ajax');

if ($is_ajax)

{

    $this->load->model('forums_model');
    $total_loves = $this->forums_model->add_love($post_id, $user_id);
    echo json_encode($total_loves);

}

// If someone tries to access the AJAX function directly.

else

{

    redirect('', 'location');

}
型号: 最后,调用model函数向数据库添加一个love并返回新的计数,它在控制器中使用JSON(我想)获取

所以

  • 我如何用JSON获取这个新的爱情计数,并让我的计数器显示新的总数
  • 我的代码中还有什么需要更改/改进的吗
  • 最后,我无法使用POST方法,因为我启用了CSRF保护。如何修改代码以允许使用POST方法而不是GET方法?或者GET方法可以吗
  • 谢谢,对于PHP、CodeIgniter、AJAX和jQuery,我还是很生疏的。享受挑战吧

    • 蒂姆
    1。我如何用JSON获取这个新的爱情计数,并让我的计数器显示新的总数? 你(几乎)已经这样做了。您的
    json\u encode()
    返回值是一个整数。请尝试以下方法:

    <?php
    //...
    echo json_encode(array('total_loves' => $total_loves));
    //...
    

    3.最后,我无法使用POST方法,因为我启用了CSRF保护。如何修改代码以允许使用POST方法而不是GET方法?或者GET方法可以吗? 我强烈建议使用POST而不是GET,因为GET请求被假定为而不是来更改任何数据。(为了更好地理解这个概念,谷歌搜索了“幂等性…”

    关于CSRF保护,我在回答您的第一个问题时提供了一个解决方案(见上文)。

    1。我如何用JSON获取这个新的爱情计数,并让我的计数器显示新的总数? 你(几乎)已经这样做了。您的
    json\u encode()
    返回值是一个整数。请尝试以下方法:

    <?php
    //...
    echo json_encode(array('total_loves' => $total_loves));
    //...
    

    3.最后,我无法使用POST方法,因为我启用了CSRF保护。如何修改代码以允许使用POST方法而不是GET方法?或者GET方法可以吗? 我强烈建议使用POST而不是GET,因为GET请求被假定为而不是来更改任何数据。(为了更好地理解这个概念,谷歌搜索了“幂等性…”


    关于CSRF保护,我在回答您的第一个问题时提供了一个解决方案(见上文)。

    Genius!非常感谢你花时间研究我的问题。我真的很感激。它仍然不能完美地工作,但这只是因为我需要在我的视图中整理循环。你让我走上了正确的道路。:)天才!非常感谢你花时间研究我的问题。我真的很感激。它仍然不能完美地工作,但这只是因为我需要在我的视图中整理循环。你让我走上了正确的道路。:)
    <?php
    //...
    echo json_encode(array('total_loves' => $total_loves));
    //...
    
    <?php
    // Probably better to pass in these values from
    // the controller, but this should work...
    $CI =& get_instance();
    $token = $CI->security->get_csrf_token_name();
    $hash  = $CI->security->get_csrf_hash();
    ?>
    
    $.ajax({
        type: 'POST',
        url: base_url + '/ajax/love_forum_post',
        data: {
            post_id: 2,
            user_id: 1,
            '<?= $token; ?>': '<?= $hash; ?>' // this takes care of the CSRF issue
        },
        dataType: 'json',
        success: function(response) {
            alert(response.total_loves); // do something with the return value...
        }
    });
    
    <?php
    $is_ajax = $this->input->is_ajax_request();