jQuery: O que fazer com a lista que classificáveis ??( 'serialize') retorna?
-
19-08-2019 - |
Pergunta
Com jQuery Eu estou recuperando posições de uma lista de classificáveis ??usando 'serialize', como este:
var order = $('ul').sortable('serialize');
A variável 'ordem', em seguida, recebe o seguinte:
id[]=2&id[]=3&id[]=1&id[]=4&id[]=5
Agora, como posso usar esses dados em uma chamada de ajax?
Isto é como eu pretendo fazê-lo, mas é feio e eu não posso mudar o nome do parâmetro 'id':
$.post('ajax.php?'+order,{action:'updateOrder'});
Talvez eu precise unserialize, então implodir a variável 'ordem' e atribuí-la a apenas um parâmetro?
Eu não tenho um problema com o código do lado do servidor, mas eu tenho um problema com o código do site cliente jQuery. A pergunta é: onde posso colocar a variável 'ordem' no script?
No exemplo que dei eu adicionei-o como uma string de consulta:
'ajax.php?'+order
Mas eu gostaria de passá-lo como um parâmetro, assim como o parâmetro de ação. A seguir não funciona, ele retorna um erro de sintaxe:
$.post('ajax.php?'+order,{action:'updateOrder',order});
Solução
Encontrei! Eu precisava para adicionar o key:'string'
opção que muda o nome da variável para 'string' em vez de 'id'.
var order = $('#projects ul').sortable('serialize',{key:'string'});
$.post('ajax.php',order+'&action=updateOrder');
Outras dicas
Eu acho que a melhor maneira não é para uso sortable('serialize')
em tudo, mas usar jQuery simplesmente iterar sobre os ids ordenadas, assim:
order = [];
$('ul').children('li').each(function(idx, elm) {
order.push(elm.id.split('_')[1])
});
$.get('ajax.php', {action: 'updateOrder', 'order[]': order});
Isto tem uma vantagem sobre acrescentando explicitamente a classificáveis ??serializado para o URL (ou um parâmetro) na medida em que não inclui o parâmetro order[]
em tudo se não houver li
na lista. (Quando eu tive esse problema eu estava usando sortable(connectWith: 'ul')
por isso era perfeitamente possível para um usuário para arrastar todo o li
de uma lista). Em contraste anexando o classificáveis ??serializado deixaria uma indesejada '&'.
Vamos dizer que você estavam pedindo notícias, e sua página enviada isso "? Id [] = 2 & id [] = 3 & id [] = 1 & id [] = 4 & id [] = 5" seu código 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'});
isso pode funcionar também;)
A melhor maneira é saber recurso order = $('ul').sortable('serialize');
uso var a é mostrado no seguinte link:
Tudo que você precisa para obter os dados lista ordenada em seu arquivo php é o código:
foreach( $_POST['id'] as $order => $order_nb )
{
...
}
Em relação à param "chave" eu usei os colchetes, a fim de obter uma matriz.
var data = $('#cms-form').serialize();
data += '&' + $('.ui-tabs-nav').sortable('serialize', {key:'nav_order[]'});
Solução
Eu criei a minha própria solução, manipulando classificáveis ??( 'serialize'). Eu simplificaram-lo usando funções jQuery e, em seguida, postou a url php para a ordem da lista atualização no banco de dados. Dê uma olhada no meu código.
$( "#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);
}
});
}
});
Felicidades
Se os dados são
$data = 'album[]=stat&sort[]=157204&sort[]=157205&sort[]=157206&sort[]=157208&sort[]=157207&sort[]=157209&sort[]=157210&sort[]=157211&sort[]=157212&sort[]=157213';
e você deseja obter tipo de matriz em php Use parse_str ( )
parse_str($data, $output);
print_r($output);
Output: ordem ( [Álbum] => array ( [0] => status )
[sort] => Array
(
[0] => 157204
[1] => 157205
[2] => 157206
[3] => 157208
[4] => 157207
[5] => 157209
[6] => 157210
[7] => 157211
[8] => 157212
[9] => 157213
)
)