0

嘿,我已经为我的网站后端创建了一个可排序的列表来组织我的类别,我已经完成了所有工作,因此它使用 Ajax 运行更新 SQL 语句,它无需重新加载就可以保存我的数据,但是我的订单号在我重新加载之前,从数据库显示在我的后端不会改变,任何帮助都会很棒,在此先感谢!

PHP

        <?php
    $sql = "SELECT cat_id, cat_name, cat_slug, cat_status, cat_order, sta_id, sta_name
            FROM app_categories LEFT JOIN app_status
            ON app_categories.cat_status = app_status.sta_id
            ORDER BY cat_order ASC";

        if($result = query($sql)){
            $list = array();

            while($data = mysqli_fetch_assoc($result)){
                array_push($list, $data);
            }

            foreach($list as $i => $row){ 
            ?>
                <div class="row" id="page_<?php echo $row['cat_id']; ?>">
                    <div class="column two"><?php echo $row['cat_name']; ?></div>
                    <div class="column two"><?php echo $row['cat_slug']; ?></div>
                    <div class="column two"><?php echo $row['cat_status']; ?></div>
                    <div class="column two"><?php echo $row['cat_order']; ?></div>
                </div>
            <?php
            }
        }
        else {
            echo "FAIL";
        }
    ?>

带有 Ajax 调用的 jQuery

        $(document).ready(function(){
        $("#menu-pages").sortable({
            update: function(event, ui) {
                $.post("ajax.php", {  type: "orderPages", pages: $('#menu-pages').sortable('serialize') } );
            }
        });
    });

还有我的 ajax.php 进行更新

<?php

parse_str($_POST['pages'], $pageOrder);

foreach ($pageOrder['page'] as $key => $value) {
    $sql = "UPDATE app_categories SET `cat_order` = '$key' WHERE `cat_id` = '$value'";

    if(query($sql)) {
        echo "YES"; 
    }
    else {
        echo "NO";  
    }

}

?>

4

1 回答 1

1

您似乎没有任何类型的代码来处理前端更新。最简单的做法是在您的 ajax 帖子中添加回调,并让服务器将更新信息作为 json 数据发送回。

所以 ajax.php 看起来更像

<?php

parse_str($_POST['pages'], $pageOrder);

foreach ($pageOrder['page'] as $key => $value) {
$sql = "UPDATE app_categories SET `cat_order` = '$key' WHERE `cat_id` = '$value'";

if(query($sql)) {
    $orderSql = "SELECT cat_id, cat_name, cat_slug, cat_status, cat_order, sta_id, sta_name
        FROM app_categories LEFT JOIN app_status
        ON app_categories.cat_status = app_status.sta_id
        ORDER BY cat_order ASC";

    if($result = query($sql)){
          echo json_encode(mysqli_fetch_assoc($result));
          return;
    }

} else {
    echo json_encode( array('result' => 'failure'));
}

}

(是的,它很丑陋且未经测试,但你明白了。)

然后你的 javascript 看起来像

    $.post("ajax.php", {  type: "orderPages", pages: $('#menu-pages').sortable('serialize') }, function(res){
         if (typeof res.result !== undefined && res.result === 'failure'){
              alert('failed!');
               return;
         } else {
              $.each(res, function(i, item){
                     $("#page_" + item.cat_id).find('div:eq(3)').html(item.cat_order);
              });
     }, 'json' );

这又是可怕的,但希望能传达这一点。

或者,您可以在排序 div 移动时简单地更新数字。那看起来像:

   $("#menu-pages").sortable({
        update: function(event, ui) {
            $.post("ajax.php", {  type: "orderPages", pages: $('#menu-pages').sortable('serialize') } );
            $('.row').each(function(i){
                 $(this).find('div:eq(3)').html(parseInt(i) + 1);
            });
        }
    });

也没有测试,这是假设 cat_sort 是 1-indexed 并且没有丢失任何值等。

于 2013-03-22T02:55:40.957 回答