用php改造Jquery序列化li

用php改造Jquery序列化li,php,jquery,serialization,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; whil

我在序列化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>
问题是,当我重新加载我的页面时,我的列表没有按正确的方式排序…我如何才能保持列表的最后顺序?
谢谢

您可以将order参数保存在PHP中-将其存储在$\u会话中,或者在用户计算机上设置一个cookie并检索该参数进行排序。

您的逻辑不正确

将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>';
$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.';

为什么不使用使用$.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);
            }
        });
    }
 }); 
第一次,您应该从ajax请求中调试参数,使用php非常简单

<?php
  print_r($_GET);
?>


然后,当你知道那里给出了什么参数时,你就可以做剩下的事情了

。我真的不想设置cookie…位置在我的数据库中被更新,但我不知道在jquery脚本(或其他任何地方)中,我可以在右侧修改列表元素的位置order@Aur艾琳·克罗切特:我不确定我是否理解你刚才说的话。CSV与一切有什么关系?在您的AJAX请求中,您发送了一个订单。您可以使用Cookie或会话变量缓存order参数。@AurélienClochet:我不想听起来很刻薄,但这似乎是一种愚蠢的存储排序的方式。但是,您需要做的只是在当前查询之上添加一个查询,以检索所需的正确排序。然后,不要按
id
下单,而是按
$orderBy
下单@Josh,天哪,你说得对,就是这样!谢谢。但当你说“这似乎是一种愚蠢的存储排序方式”时,你在想什么呢?我是jQuery/serialize的初学者,我并不反对有更好的选择来完成这项工作。@Josh,这是我在进行这项序列化时想到的事情。首先,我在数据库中输入什么是我的li元素(带有内容)。当a输入我想要的所有数据时,我创建我的列表。这样做的目的是重新组织我的li,并保住他们的位置。通过这种方式,我可以在不同的浏览器(和计算机)上工作,并继续对元素进行排序。我不知道我的英语在这里是否有效^^它不起作用:(当我第一次创建动态li元素时,我没有发送position(或position=0)在我的DB中。然后,当我移动它们时,我的值是0,1,2,3等等…我页面中的li数。因此,我的id 1元素可以有位置4等等。如果它在我移动li元素时在我的DB中移动,当我刷新时,无论我做什么样的顺序,顺序仍然是第一个。我回应这一点:
  • 。$res01[“contenu”]。

  • ;它可以工作。当我拖动一个元素时,它会进行调整并将其保存到数据库中,当我刷新时,它会显示新的顺序。这不是您想要的结果吗?谢谢,我的代码以这种方式更好…但我的问题仍然是一样的:)
    $("#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);
                }
            });
        }
     }); 
    
    <?php
      print_r($_GET);
    ?>