通过JavaScript阅读拖放有序列表

Rob*_*key 2 html javascript ajax jquery-ui html-lists

我有一个应用程序(使用JqueryUI.GridSort拖放),允许用户上传照片,然后按照他们想要的顺序使用拖放对照片进行排序.

在页面加载时,系统会提示用户上传发布到下一页的照片.当他们到达下一页时,我的php脚本会为他们上传的每个文件创建一个<ul id="sortable">包含内容<li>.对于他们上传到网站的每张图片,都会<li>创建一个新图片.其中的内容<li><img><li>他们上传的图片设置图片.

我的目标是能够在拖放界面中将图片排列后"保存"图片的顺序.例如,一旦他们按照他们想要的顺序完成图片的排列和排序,我希望能够向他们发送另一个创建xml文件的页面(我不需要XML的帮助,只保存了使用他们以正确顺序创建的列表.

经过几个小时的PHP修补,我逐渐认识到,因为PHP是一种服务器端语言,所以它无法看到后期渲染的内容.所以我的问题是,有没有办法让JavaScript或Ajax读取列表的当前顺序,并将其发布到下一页?如果你知道怎么做,请你提供一个页面的POST和另一个的帖子接收的例子吗?我对Ajax不太熟悉.

非常感谢您提供的任何帮助.

示例代码(为每个上传的文件创建LI的foreach语句的内容)

 $imgID++;


echo '<li class="ui-state-default"><img id="'.$imgID.'"'.' src="user_files/'.$file_name.'" draggable="true" height="90" width="95"></li>';
Run Code Online (Sandbox Code Playgroud)

编辑

main page :


<script>
$('#my_form').on('submit', function() {
    var ordered_list = [];
    $("#sortable li img").each(function() {
        ordered_list.push($(this).attr('id'));
    });
    $("#ordered_list_data").val(JSON.stringify(ordered_list));
});
</script>
<div id="tesT">
<form id="my_form" action="update_data.php">
    <!-- other fields -->
    <input type="hidden" id="ordered_list_data"></input>
    <input type="submit" value="Proceed to Step 2"></input>
</form>
</div>


update_data.php:

<?php
    // process other fields as normal
    if(isset($_POST['ordered_list_data'])) {
        $img_ordering = json_decode($_POST['ordered_list_data']);
echo "1";
    } else {
       echo "nodata";
    }
    // do things with the data

?>
Run Code Online (Sandbox Code Playgroud)

小智 5

我建立了一个JSFiddle基本上和David发布的一样.

我添加了一个部分来将结果写出到页面上的div,这样你就可以看到发生了什么:

<input type="button" id="savebutton" value="save"/>
<div id="output"></div>
<form id="listsaveform" method="POST" action="script.php">
    <input type="hidden" name="list" id="hiddenListInput" />
</form>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$(function() {
$( "#sortable" ).sortable();
$( "#sortable" ).disableSelection();
$( "#savebutton" ).click(function() { LISTOBJ.saveList(); });
});

var LISTOBJ = {
    saveList: function() {
        var listCSV = "";
        $( "#sortable li" ).each(function() {
            if (listCSV === "") {
                listCSV = $(this).text();
            } else {
                listCSV += "," + $(this).text();
            }
            $("#output").text(listCSV);
            $("#hiddenListInput").val(listCSV);
            //$("#listsaveform").submit();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)