مسج:ماذا تفعل بالقائمة التي يتم إرجاعها القابلة للفرز ('التسلسل')؟

StackOverflow https://stackoverflow.com/questions/654535

سؤال

باستخدام jQuery، أقوم باسترداد مواضع قائمة قابلة للفرز باستخدام "التسلسل"، مثل هذا:

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

يتلقى المتغير "order" ما يلي:

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

الآن كيف يمكنني استخدام هذه البيانات في مكالمة اياكس؟

هذه هي الطريقة التي أخطط للقيام بها، لكنها قبيحة ولا أستطيع تغيير اسم المعلمة "id":

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

ربما أحتاج إلى إلغاء التسلسل، ثم تفجير المتغير "الترتيب" وتعيينه لمعلمة واحدة فقط؟


ليس لدي مشكلة مع التعليمات البرمجية من جانب الخادم، ولكن لدي مشكلة مع التعليمات البرمجية لموقع عميل jQuery.السؤال هو أين أضع متغير "الترتيب" في البرنامج النصي؟

في المثال الذي قدمته أضفته كسلسلة استعلام:

'ajax.php?'+order

لكني أرغب في تمريرها كمعلمة، تمامًا مثل معلمة الإجراء.ما يلي لا يعمل، فهو يُرجع خطأً في بناء الجملة:

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

هل كانت مفيدة؟

المحلول

وجدت ذلك! أنا في حاجة لإضافة key:'string' الخيار الذي يتغير اسم المتغير إلى 'سلسلة' بدلا من 'هوية'.

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

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

نصائح أخرى

وأعتقد أن أفضل طريقة هي عدم استخدام sortable('serialize') على الإطلاق، ولكن استخدام مسج تكرار ببساطة على هويات فرزها، كما يلي:

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 من قائمة واحدة). في المقابل إلحاق للفرز تسلسل سيترك غير مرغوب فيه '&'.

ودعونا نقول لكم قد يأمر العناصر الأخبار، وصفحتك أرسل هذا "؟ معرف [] = 2 & معرف [] = 3 & معرف [] = 1 & معرف [] = 4 & معرف [] = 5" أكواد بي.

$_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'});

وهذا قد عمل أيضا؛)

وأفضل طريقة يعرفون استخدام يظهر ميزة فار order = $('ul').sortable('serialize'); في الرابط التالي:

<وأ href = "http://blog.arnaud-k.fr/2010/09/29/tutorial-jquery-trier-une-liste-en-dragndrop-avec-jqueryui-sortable/" يختلط = " نوفولو "> http://blog.arnaud-k.fr/2010/09/29/tutorial-jquery-trier-une-liste-en-dragndrop-avec-jqueryui-sortable/

وكل ما تحتاجه للحصول على البيانات قائمة مرتبة في ملف بى الخاص بك هو رمز:

foreach( $_POST['id'] as $order => $order_nb )
{
    ...
}

وفيما يتعلق المعلمة "رئيسيا" لقد استخدمت الأقواس المربعة من أجل الحصول على صفيف.

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

والحل

ولقد خلق بلدي حل بهم من خلال التلاعب للفرز ( 'تسلسل'). لقد مبسطة عليه باستخدام وظائف مسج، ومن ثم نشره لفب رابط لتحديث ترتيب قائمة في قاعدة البيانات. إلقاء نظرة على قانون بلدي.

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

)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top