Ответ 1
Нашел! Мне нужно было добавить опцию key:'string'
, которая изменяет имя переменной на "string" вместо "id".
var order = $('#projects ul').sortable('serialize',{key:'string'});
$.post('ajax.php',order+'&action=updateOrder');
С помощью 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. Вопрос в том, где я помещаю переменную "порядок" в script?
В примере, который я дал, я добавил его как строку запроса:
'ajax.php?'+order
Но я хотел бы передать его как параметр, как и параметр action. Не работает следующее: он возвращает синтаксическую ошибку:
$.post('ajax.php?'+order,{action:'updateOrder',order});
Нашел! Мне нужно было добавить опцию key:'string'
, которая изменяет имя переменной на "string" вместо "id".
var order = $('#projects ul').sortable('serialize',{key:'string'});
$.post('ajax.php',order+'&action=updateOrder');
Я думаю, что лучший способ - не использовать 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
из одного списка). В отличие от добавления сериализованной сортировки, остался бы нежелательный "&".
Предположим, вы заказывали новостные статьи, и ваша страница отправила это на "? 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
var order = $('#projects ul').sortable('toArray'});
это тоже может работать;)
Лучший способ знать, как использовать функцию var order = $('ul').sortable('serialize');
, показан по следующей ссылке:
Все, что вам нужно, чтобы получить упорядоченные данные списка в вашем php файле, это код:
foreach( $_POST['id'] as $order => $order_nb )
{
...
}
Что касается параметра "ключ", я использовал квадратные скобки для получения массива.
var data = $('#cms-form').serialize();
data += '&' + $('.ui-tabs-nav').sortable('serialize', {key:'nav_order[]'});
Решение
Я создал свое собственное решение, манипулируя сортировкой ('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);
}
});
}
});
Приветствия
если данные находятся на
$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
)
)