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});

Foi útil?

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:

http://blog.arnaud-k.fr/2010/09/29/tutorial-jquery-trier-une-liste-en-dragndrop-avec-jqueryui-sortable/

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
    )

)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top