我找到了一个名为nestedSortable的精彩jquery插件,效果很好。现在我需要做的就是使用新的排序顺序更新我的数据库。我正在使用PHP。
这是我感到困惑的地方。在提供的示例中,有三种获取输出的方法。序列化,层次结构和数组。
如何修改javascript以允许我将输出发送到PHP以便通过POST进行处理?
我已经阅读了整个插件论坛,并在form of a save function中找到了希望获得此功能的人的一线希望。不幸的是它是BYO getItemIdFromElement($element)
并且插件的开发者说他的数组函数用更干净的代码做了完全相同的事情......
我希望并且真的很感激,如果有人能帮助我理解这一点!
添
答案 0 :(得分:7)
我自己也遇到过这个问题。在forum上发布了一个解决方案,通过表单(form solution)保存列表。我个人更喜欢AJAX,所以我写了自己的解决方案。要解决您的问题AJAX方式,您必须按如下方式更改代码:
变化:
$('ol.sortable').nestedSortable({
disableNesting: 'no-nest',
forcePlaceholderSize: true,
handle: 'div',
helper: 'clone',
items: 'li',
maxLevels: 3,
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div'
});
在:
$('ol.sortable').nestedSortable({
disableNesting: 'no-nest',
forcePlaceholderSize: true,
handle: 'div',
helper: 'clone',
items: 'li',
maxLevels: 3,
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div',
update: function () {
list = $(this).nestedSortable('toHierarchy', {startDepthCount: 0});
$.post(
'http://www.domainname.com/ajax/ajax.php',
{ update_sql: 'ok', list: list },
function(data){
$("#result").hide().html(data).fadeIn('slow')
},
"html"
);
}
});
然后,您需要创建一个处理数据的ajax.php页面:
<? if (!empty($_REQUEST["list"]) && !empty($_REQUEST["update_sql"])) {
if ($_REQUEST["update_sql"] = 'ok') {
if (!empty($_REQUEST["list"])) {
$list = $_REQUEST["list"];
foreach ($list as $key => $value) {
mysql_query("UPDATE categories SET order = '" . $key . "' WHERE id = '" . $value['id'] . "'");
}
echo '<span class="success">Successfully updated.</span>';
}
} } ?>
可以改进PHP代码(检查MySQL注入等)。您也可以删除示例中提供的其他功能,因为您不需要它们。不要忘记在JavaScript中更改POST URL;)祝你好运!
答案 1 :(得分:0)
您可以使用.ajax()将序列化数据发送到PHP脚本,并指定POST作为您的数据类型。
您还可以填写带有隐藏值的表单,然后提交,但这看起来很脏。