【发布时间】:2017-03-09 00:02:41
【问题描述】:
在我看来,JQuery UI 中的序列化返回的值不是我看到的顺序。据我所知,数组是随机顺序的,所以我不能按照我想要的顺序对其进行排序。
用例是一个用于重新排序的拖放表。在我拖动一行后,它会按预期重新排序表格。但是,一旦我拖动,序列化值似乎是随机的。因此,如果我将某些内容移至 item-2,我希望它为 2。但是,有时它的顺序为 0、顺序 7 或顺序 10。如何捕获并重新排序表,然后将这些值传递到 MySQL预期的顺序?
这是我的 javascript:
var fixHelperModified = function(e, tr) {
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index) {
$(this).width($originals.eq(index).width())
});
return $helper;
},
updateIndex = function(e, ui) {
$('td.index', ui.item.parent()).each(function (i) {
$(this).html(i + 1);
});
};
//noinspection JSUnresolvedFunction
$('#sortable').sortable({
helper: fixHelperModified,
axis: 'y',
opacity: 0.5,
cursor: 'move',
stop: updateIndex,
update: saveRows
}).disableSelection();
function saveRows(){
var tableRows = $(this).sortable('serialize');
// POST to server using $.post or $.ajax
//noinspection JSUnresolvedVariable
$.ajax({
cache: false,
url: "/plugins/site/themes/admin/ajaxUpdate.php",
type: "POST",
data: tableRows
});
}
还有我的php来更新MYSQL:
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/cfg.php");
foreach ($_POST['rowsort'] as $id => $order){
$sql = "UPDATE `categories` SET `order` = :categoryorder WHERE `id` = :categoryid;";
$stmt = mySQL::getConnection()->prepare($sql);
$stmt->bindParam(':categoryorder', $order);
$stmt->bindParam(':categoryid', $id);
$stmt->execute();
$stmt->closeCursor();
}
我的 HTML 是一个引导表,其中包含 id="rowsort-<?php echo $i; ?>"
我知道serialize()默认使用id字段,所以想不通为什么不能得到一致的返回值。
【问题讨论】:
-
从你的服务器,你在返回成功响应之前已经序列化了
-
与问题无关,但只需要调用
prepare()和bindParam()一次,而不是每次循环。准备好并绑定语句后,您可以在循环内调用execute()以使用不同的变量值重复执行相同的查询。 -
谢谢,我没有意识到
execute()可以带参数。我一定会调查的。 @Henrique-yc,我不擅长 Javascript,这是我第一次尝试 ajax。你是说我需要将序列化函数定义为 $.ajaxsuccess的一部分吗? -
没有朋友,我从你的服务器端谈论这个动作,但是如果你使用的是 node js,你必须从 node 那里做
标签: javascript php jquery mysql serialization