jQuery可以使用Ajax和mySQL进行排序

时间:2013-03-22 01:20:09

标签: php jquery mysql ajax jquery-ui-sortable

嘿我已经为我的网站后端创建了一个可排序的列表来组织我的类别,并且我已经完成所有工作,因此它使用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";  
    }

}

&GT;

1 个答案:

答案 0 :(得分: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' );

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

或者,只要移动它,您就可以简单地更新sort 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索引且没有遗漏任何值等等。