2009-03-17 10 views
13

Mit jQuery Ich Abrufen Positionen einer sortierbare Liste 'serialize', wie dies mit:jQuery: Was tun mit der Liste, die sortierbar ('serialisieren') zurückgibt?

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

Die Variable 'bestellen' erhält dann folgendes:

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

Jetzt Wie kann ich diese Daten in einem Ajax-Aufruf verwenden?

Dies ist, wie ich plane, es zu tun, aber es ist hässlich, und ich kann den Parameternamen ‚id‘ nicht ändern:

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

Ich muss unserialize, dann implodieren die Variable Vielleicht ' Ordnung 'und ordnen Sie es nur einem Parameter zu?

Ich habe kein Problem mit dem serverseitigen Code, aber ich habe ein Problem mit dem jQuery-Client-Site-Code. Die Frage ist, wo setze ich die Variable 'order' in das Skript?

Im Beispiel habe ich mich es als eine Abfrage-String hinzugefügt:

'ajax.php?'+order

Aber ich mag es als Parameter zu übergeben, ebenso wie die Aktionsparameter. Die folgenden nicht funktioniert, es gibt einen Syntaxfehler:

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

+0

Sowohl Ihre Ideen tun. Es hängt von deiner Stimmung ab :) – Seb

Antwort

16

Es gefunden! Ich musste die Option key:'string' hinzufügen, die den Variablennamen in 'string' anstatt 'id' ändert.

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

$.post('ajax.php',order+'&action=updateOrder'); 
+2

Schau dir die Antwort mit 'toArray' an. Es ist auch eine wirklich gute Option. http://jqueryui.com/demos/sortable/#method-toArray – trgraglia

7

Können sagen, Sie Nachrichten wurden die Bestellung und Ihre Seite gesendet, dies zu „id [] = 2 & id [] = 3 &? id [] = 1 & ID [] = 4 & ID [] = 5 "Ihr PHP-Code.

$_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 
13

Ich denke, der beste Weg, überhaupt nicht zu verwenden sortable('serialize'), aber jQuery verwenden, um einfach die sortierten ids iterieren, etwa so:

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

Dies hat einen Vorteil über explizit die serialisierte Anhänge Sortierbar auf die URL (oder einen Parameter), da der Parameter order[] überhaupt nicht enthalten ist, wenn in der Liste kein li vorhanden ist. (Als ich dieses Problem hatte, benutzte ich sortable(connectWith: 'ul'), so dass es für einen Benutzer durchaus möglich war, alle li aus einer Liste zu ziehen). Im Gegensatz dazu würde das Anhängen der serialisierten Sortierung eine unerwünschte "&" hinterlassen.

+0

Vielen Dank, dieser Ansatz hat für mein Problem funktioniert, es nicht als Teil der URL zu übergeben. – montrealist

+0

Dies scheint ein subtilerer Ansatz. – foxybagga

2

In Bezug auf den "Schlüssel" Parameter habe ich die eckigen Klammern verwendet, um ein Array zu erhalten.

var data = $('#cms-form').serialize(); 
data += '&' + $('.ui-tabs-nav').sortable('serialize', {key:'nav_order[]'}); 
4
var order = $('#projects ul').sortable('toArray'}); 

könnte dies auch funktionieren;)

+0

Dies ist eine gute Option für das, was Sie wollen ... iterieren Sie über das Array und übergeben Sie den Variablennamen wie Sie möchten. – trgraglia

0

Lösung

Ich habe meine eigene Lösung geschaffen, durch die Manipulation sortierbar ('serialize'). Ich habe es vereinfacht, indem ich jquery Funktionen verwendet habe, und es dann zur Aktualisierung der Reihenfolge der Liste in der Datenbank nach php url gepostet. Schau dir meinen Code an.

$("#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); 
       } 
      }); 
     } 
    }); 

Prost

0

wenn Daten

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

ist und Sie wollen in php
Verwendung parse_str()
parse_str($data, $output);
print_r($output);

Art als Array erhalten

Ausgang: Array ( [Album] => Array ( [0] => stat )

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

)

Verwandte Themen