0

我正在尝试使用 jQuery 在 CodeIgniter 中创建一个可拖动的列表。我有代码以便拖动工作,但我无法将数据发送到控制器。

这是用于拖动的 jQuery 代码。

$(function() {

        $( "#order" ).sortable({
            opacity: 0.6,
            cursor: 'move',

            update: function(event, ui){
 var order = $(this).sortable("serialize");
 console.log(order);

                $.ajax({
                    url: "http://localhost/codeigniter214/profile/save_order",
                    type: 'POST',
                    data: order,
                    success: function (data) {
                        $("#test").html(data);
                    }    
                });
                }    
            });    
});

这是可拖动的列表。

<?php if (isset($names)) {?>
<ul id="order">
    <?php foreach (array_combine($ids, $names) as $id => $name) {?>
    <li id="feed-<?php echo $id ?>"><?php echo $name; ?> <a href="profile/removefeed/<?php echo $id ?>">Remove</a></li>
<?php } ?>
</ul>
<?php } ?>

这是数据被传递到的控制器。但是,var_dump 显示了一个空数组,这让我相信问题出在 AJAX 和信息传输上。

function save_order() {
var_dump($_POST);

    $items = $this->input->post('item');
    $total_items = count($this->input->post('item'));

    echo '<h3>Debugging</h3>';
    echo "<p>Total items sent: $total_items</p>";

    $this->profile_model->update_order($total_items, $items);
}

任何帮助将不胜感激。谢谢你。

4

1 回答 1

0

答案最终是关于 CodeIgniter 的 CSRF 实现。最后将 jQuery 更改为下面的内容并使用 jQuery Cookie 设置 cookie。

$(function() {

$( "#order" ).sortable({
    opacity: 0.6,
    cursor: 'move',
    update: function(event, ui){
        var order = 'csrf_test_name=' + $.cookie('csrf_cookie_name') + '&';
        order += $(this).sortable("serialize");
        console.log(order);
        $.ajax({
            data: order,
            csrf_test_name: $.cookie('csrf_cookie_name'),
            type: 'POST',
            url: "http://127.0.0.1/codeigniter214/profile/save_order",
            success: function (data) {
                $("#test").html(data);
            }

        });
    }

});
});
于 2013-11-12T05:22:45.080 回答