用PHP改进Jquery序列化li

时间:2012-01-12 21:24:16

标签: php jquery serialization

我遇到了序列化Jquery功能的问题。 拳头,我用PHP脚本创建我的li元素,我的数据写在我的数据库中(带有“id”,“contenu”,“position”)并在我的html中捕获它:

<article>
<ul id="columns">
    <?php 
        $req01=mysql_query("SELECT * FROM mytable ORDER BY id DESC");
        $i=0;

        while ($res01=mysql_fetch_array($req01)){                    
            $i++;
            echo '
                <li class="column" id="listItem_'.$res01["position"].'" draggable="true">
                <p>'.$res01["contenu"].'</p>
                </li>';
        }
    ?>
</ul>
</article>

这是我的剧本          $(document).ready(function(){

$("#columns").sortable({ 
    column : '.column', 
    update : function () { 
    var order = $('#columns').sortable('serialize'); 
    $("#info").load('structure-reform.php?'+order); 
    //alert("Data Loaded: " + order);
    }
 }); 

    }); 
</script>

在这里,当我的订单正在改变时,我更新我的数据库的方式

foreach ($_GET['listItem'] as $position => $item) :
$list[] = "$position, $item";
$req03=mysql_query("UPDATE mytable SET position='".$position."' WHERE id='".$item."'");
$result = mysql_query($req03);
endforeach;

问题是,当我重新加载我的页面时,我的列表没有以正确的方式排序...我怎么能保持我的列表在最后的顺序? 谢谢!

3 个答案:

答案 0 :(得分:0)

您要么想要在PHP中保存订单参数 - 将其存储在$ _SESSION中,或者在用户的计算机上设置一个cookie并检索它以进行排序。

答案 1 :(得分:0)

你的逻辑不正确。

用这个替换你的javascript:

$("#columns").sortable({ update: function() {
                    var order = $(this).sortable("serialize");
                    $.post("structure-reform.php", order);
                }
                });

用这个

替换你的列表html
<li class="column" id="listItem_'.$res01['id'].'" draggable="true" rel="'.$perso.'">
                    <p>'.$res01["contenu"].'</p>
                </li>';

用这个

替换你的while循环
$listingCounter = 1;
    foreach ($_POST['listItem'] as $recordIDValue) {

        $query = "UPDATE structure SET position = " . $listingCounter . " WHERE id = " . $recordIDValue;
        mysql_query($query) or die('Error, insert query failed');
        $listingCounter = $listingCounter + 1;
    }

    echo 'If you refresh the page, you will see that records will stay just as you modified.';

答案 2 :(得分:0)

为什么你不使用$ .ajax()使用jquery ajax?可能是serialize()有问题,你试过这个吗?

$("#columns").sortable({ 
    column : '.column', 
    update : function () { 
        var order = $(this).sortable('serialize'); 
        $.ajax({
            url : 'structure-reform.php',
            type: 'GET',
            data: order,
            success:function(res){
                alert('Data Loaded '+res);
            }
        });
    }
 }); 

和第一次使用fot时,你应该从ajax请求中调试参数,使用php非常简单

<?php
  print_r($_GET);
?>

然后当你知道那里给出了什么参数时你可以做其余的事情