реформировать Jquery сериализовать li с помощью php - PullRequest
0 голосов
/ 13 января 2012

У меня проблемы с сериализацией функции Jquery. Во-первых, я создаю свой элемент li с помощью php-скрипта, мои данные записываются в мою базу данных (с "id", "contenu", "position") и ловлю его в моем html:

<article>
<ul id="columns">
    <?php 
        $req01=mysql_query("SELECT * FROM mytable ORDER BY id DESC");
        $i=0;

        while ($res01=mysql_fetch_array($req01)){                    
            $i++;
            echo '
                <li class="column" id="listItem_'.$res01["position"].'" draggable="true">
                <p>'.$res01["contenu"].'</p>
                </li>';
        }
    ?>
</ul>
</article>

А вот и мой сценарий $ (документ) .ready (function () {

$("#columns").sortable({ 
    column : '.column', 
    update : function () { 
    var order = $('#columns').sortable('serialize'); 
    $("#info").load('structure-reform.php?'+order); 
    //alert("Data Loaded: " + order);
    }
 }); 

    }); 
</script>

А вот способ, которым я обновляю свою БД, когда меняется мой заказ

foreach ($_GET['listItem'] as $position => $item) :
$list[] = "$position, $item";
$req03=mysql_query("UPDATE mytable SET position='".$position."' WHERE id='".$item."'");
$result = mysql_query($req03);
endforeach;

Дело в том, что когда я перезагружаю свою страницу, мой список сортируется неправильно ... Как я могу сделать, чтобы сохранить мой список в последнем порядке? Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 января 2012

Ваша логика была неправильной.

замените свой javascript следующим:

$("#columns").sortable({ update: function() {
                    var order = $(this).sortable("serialize");
                    $.post("structure-reform.php", order);
                }
                });

замените ваш список HTML на

<li class="column" id="listItem_'.$res01['id'].'" draggable="true" rel="'.$perso.'">
                    <p>'.$res01["contenu"].'</p>
                </li>';

замените циклс этим

$listingCounter = 1;
    foreach ($_POST['listItem'] as $recordIDValue) {

        $query = "UPDATE structure SET position = " . $listingCounter . " WHERE id = " . $recordIDValue;
        mysql_query($query) or die('Error, insert query failed');
        $listingCounter = $listingCounter + 1;
    }

    echo 'If you refresh the page, you will see that records will stay just as you modified.';
0 голосов
/ 13 января 2012

почему вы не используете jquery ajax с помощью $ .ajax ()? может быть есть проблема с serialize (), вы пробовали это?

$("#columns").sortable({ 
    column : '.column', 
    update : function () { 
        var order = $(this).sortable('serialize'); 
        $.ajax({
            url : 'structure-reform.php',
            type: 'GET',
            data: order,
            success:function(res){
                alert('Data Loaded '+res);
            }
        });
    }
 }); 

и в первый раз вы должны отладить ваш параметр из ajax-запроса, используя php довольно просто

<?php
  print_r($_GET);
?>

тогда вы можете делать все остальное, когда знаете, какой параметр указан там

0 голосов
/ 13 января 2012

Вы можете либо сохранить параметр заказа в PHP - сохранить его в $ _SESSION, либо установить cookie на компьютере пользователя и получить его для сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...