jQuery: Что делать со списком, который возвращает sortable (serialize)? - PullRequest
13 голосов
/ 17 марта 2009

С помощью jQuery я извлекаю позиции сортируемого списка, используя 'serialize', например:

var order = $('ul').sortable('serialize');

Затем переменная 'order' получает следующее:

id[]=2&id[]=3&id[]=1&id[]=4&id[]=5

Теперь, как я могу использовать эти данные в вызове ajax?

Вот как я планирую это сделать, но это ужасно, и я не могу изменить имя параметра 'id':

$.post('ajax.php?'+order,{action:'updateOrder'});

Может быть, мне нужно отменить сериализацию, затем внедрить переменную 'order' и назначить ее только одному параметру?


У меня нет проблем с кодом на стороне сервера, но у меня проблема с кодом сайта клиента jQuery. Вопрос в том, куда поместить переменную 'order' в сценарии?

В приведенном мною примере я добавил его в виде строки запроса:

'ajax.php?'+order

Но я бы хотел передать его как параметр, как параметр действия. Следующее не работает, оно возвращает синтаксическую ошибку:

$.post('ajax.php?'+order,{action:'updateOrder',order});

Ответы [ 8 ]

16 голосов
/ 20 марта 2009

Нашли это! Мне нужно было добавить параметр key:'string', который меняет имя переменной на «string» вместо «id».

var order = $('#projects ul').sortable('serialize',{key:'string'});

$.post('ajax.php',order+'&action=updateOrder');
13 голосов
/ 20 мая 2010

Я думаю, что лучший способ - вообще не использовать sortable('serialize'), а использовать jQuery для простой итерации по отсортированным идентификаторам, например:

order = [];
$('ul').children('li').each(function(idx, elm) {
  order.push(elm.id.split('_')[1])
});                                     
$.get('ajax.php', {action: 'updateOrder', 'order[]': order});

Это имеет преимущество перед явным добавлением сериализуемого сортируемого к URL (или параметру), поскольку он вообще не включает параметр order[], если в списке нет li. (Когда у меня возникла эта проблема, я использовал sortable(connectWith: 'ul'), поэтому пользователь мог полностью перетащить все li из одного списка). Напротив, добавление в сериализованную сортировку оставит нежелательный '&'.

7 голосов
/ 17 марта 2009

Допустим, вы заказывали новости, и ваша страница отправила это по адресу "? Id [] = 2 & id [] = 3 & id [] = 1 & id [] = 4 & id [] = 5" ваш php-код.

$_POST['id'] # would be [2,3,1,4,5]

// Now we need to update the position field of these items    

foreach($_POST['id'] as $i=>$id ):
   // For our first record, $i is 0, and $id is 2.

   $post = Post::get($id); # Do you own database access here
   $post->position = $i; # Set the position to its location in the array
   $post->save(); # Save the record
endforeach
4 голосов
/ 02 марта 2012
var order = $('#projects ul').sortable('toArray'});

это тоже может сработать;)

3 голосов
/ 22 июня 2012

Наилучший способ использования var order = $('ul').sortable('serialize'); показан по следующей ссылке:

http://blog.arnaud -k.fr / 2010/09/29 / учебник-JQuery-Трир-ипа-Liste-ен-dragndrop-АВЭК-jqueryui-сортировка /

Все, что вам нужно для получения данных упорядоченного списка в вашем php-файле, это код:

foreach( $_POST['id'] as $order => $order_nb )
{
    ...
}
2 голосов
/ 12 апреля 2011

Что касается параметра "ключ", я использовал квадратные скобки, чтобы получить массив.

var data = $('#cms-form').serialize();
data += '&' + $('.ui-tabs-nav').sortable('serialize', {key:'nav_order[]'});
0 голосов
/ 05 ноября 2015

, если данные

$data = 'album[]=stat&sort[]=157204&sort[]=157205&sort[]=157206&sort[]=157208&sort[]=157207&sort[]=157209&sort[]=157210&sort[]=157211&sort[]=157212&sort[]=157213';

и вы хотите получить сортировку как массив в php
используйте parse_str ()
parse_str($data, $output);
print_r($output);

Выход: массив ( [альбом] => Массив ( [0] => stat )

[sort] => Array
    (
        [0] => 157204
        [1] => 157205
        [2] => 157206
        [3] => 157208
        [4] => 157207
        [5] => 157209
        [6] => 157210
        [7] => 157211
        [8] => 157212
        [9] => 157213
    )

) * * тысяча двадцать-один

0 голосов
/ 30 декабря 2014

Решение

Я создал свое собственное решение, манипулируя сортируемым ('serialize'). Я упростил его с помощью функций jquery, а затем разместил его в php url для обновления порядка списка в базе данных. Посмотрите на мой код.

$( "#covercast_sortable" ).sortable({
        update : function () { 
            var order = $('#covercast_sortable').sortable('serialize',{key:'string'}); 
            // order var gives something like string=3&string=2&string=1
            var ar = order.split('&');
            var i = 0;
            var str = '';
            for(i;i<ar.length;i++){
                if(str != "") { str += ','; }
                // slice is used to remove 'sting=' from every value of var ar
                str += ar[i].slice(7);
            }
            // here value of str is 3,2,1 with respect to order variable
            $.ajax({
                type: "POST",
                url: 'myURL.php',
                data: 'order=' + str,
                cache: false,
                success: function (data) {
                    console.log(data);
                }
            });
        }
    });

Приветствия

...