我有一个应用程序(使用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>';
修改
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
?>
答案 0 :(得分: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>
使用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();
});
}
}
答案 1 :(得分:3)
如果你正在使用<form>
,你可以做这样的事情(假设正在使用jQuery):
$('#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));
});
从本质上讲,你正在做的是循环<ul>
,获取每个<img>
并将id(按照外观顺序)附加到数组。数组保留了JavaScript和JSON中的排序,因此可以使用JSON.stringify
函数将其转换为JSON字符串,将其设置为<input type="hidden">
字段的值,然后提交表单。
如果您想使用AJAX,功能非常相似。但是,您不是使用onsubmit
(或onclick
),而是使用$.post
。
让我们选择<form>
选项,因为它更简单。所有人都告诉你,你会得到类似上面的JS以及像这样的HTML:
<form id="my_form" method="post" action="./update_data.php">
<!-- other fields -->
<input type="hidden" name="ordered_list_data" id="ordered_list_data"></input>
<input type="submit" value="Submit"></input>
</form>
然后,在update_data.php
(或任何脚本命名):
<?php
// process other fields as normal
if(isset($_POST['ordered_list_data'])) {
$img_ordering = json_decode($_POST['ordered_list_data']);
} else {
// handle case where there is no data
}
// do things with the data
?>