【发布时间】:2012-03-18 16:54:36
【问题描述】:
我正在尝试让这个可排序的代码工作,我已经让它在<li>s 上工作,就像在 UI 示例中一样,但现在我使用的是<div>s,这并没有真正的区别,但我认为这会让事情变得有点复杂。
所以这是我的可排序代码,附加了某种更新 ajax:
$(function() {
$( ".heriyah" ).sortable({
connectWith: ".heriyah",
handle: ".handle",
cancel: ".add",
update : function () {
var order = $('.heriyah').sortable('serialize');
$("#sortable").load("sortable.php?"+order);
},
receive: function(event, ui){
alert('RECEIVE: ' + $(ui.sender).attr('id') + '=>' + $(this).attr('id') + ' ' + (ui.item.index()+1) + ' ' + $(ui.item).text());
}
});
$( ".heriyah" ).disableSelection();
});
这是 sortable.php 的内容:
foreach ($_GET['sort'] as $position => $item) :
$query = "UPDATE content SET `order` = $position WHERE `id` = $item";
$result = mysql_query($query);
endforeach;
这是我的页面的设置方式:
<div id="someID" class="heriyah">
<div id="heriyah_sortable" class="sort_1">Content</div>
<div id="heriyah_sortable" class="sort_2">Content</div>
<div id="heriyah_sortable" class="sort_3">Content</div>
<div id="heriyah_sortable" class="sort_4">Content</div>
</div>
所以没有更新,我不知道我做错了什么。
更新(已解决):
好的,所以在我的更新查询中,我的文件路径是错误的,此外更新函数本身也搞砸了。所以我现在把它改成这样:
update : function (event, ui) {
var order = $(this).sortable('serialize');
$.post("admin/sortable.php?" + order);
},
其次,我对数据库的查询搞砸了。数据库需要 PHP 元素周围的引号。有时数据库并不关心,但在某些情况下,如果没有引号,它会出错。最好在列变量周围加上斜线引号 `,然后在查询中的 PHP 变量周围加上单引号。
这是我的查询现在的样子:
$query = "UPDATE content SET `order` = '$position' WHERE `id` = '$item'";
【问题讨论】:
-
如果您使用的是 chrome,请按 F12 打开开发人员工具,然后单击“网络”选项卡并尝试排序。每个排序操作都应该有一个网络活动,单击其中一个,然后在详细信息中查看您的帖子数据是什么。如果没有任何 post 数据,则 sortable 的序列化功能可能需要其他内容或无法正常工作。
-
我在我的 macbook 上使用 Firebug,但它没有显示任何内容,但我也刚刚更新了上面的代码!
-
排序时是否有网络活动?
-
没有任何活动。至少应该有一些东西!
-
尝试使用 .post、.get 或 .ajax 代替 .load
标签: javascript jquery jquery-ui-sortable