在我看来,在JQuery UI中序列化的返回值不是按照我看到的顺序。尽我所知,数组是随机排列的,所以我无法按照我想要的顺序对它进行排序。jQuery序列化顺序似乎是随机的
用例是一个用于重新排序的拖放表。拖动一行后,它按预期对表格进行重新排序。但是,一旦我拖动,序列化值似乎是随机的。所以,如果我将某些东西移动到第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()来用不同的变量值重复执行相同的查询。 – Barmar
谢谢,我没有意识到'execute()'可以带参数。我一定会研究这个。 @ Henrique-yc,我不擅长Javascript,这是我第一次尝试ajax。你是说我需要将序列化函数定义为$ .ajax'success'的一部分吗? – Sage