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 インデックスであり、値が欠落していないことなどを前提としています。

于 2013-03-22T02:55:40.957 に答える