문제

jQuery를 사용하면 다음과 같이 '직렬화'를 사용하여 정렬 가능한 목록의 위치를 ​​검색합니다.

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 클라이언트 사이트 코드에는 문제가 있습니다.문제는 스크립트에서 'order' 변수를 어디에 배치해야 하느냐는 것입니다.

제가 제시한 예에서는 이를 쿼리 문자열로 추가했습니다.

'ajax.php?'+order

하지만 액션 매개변수처럼 매개변수로 전달하고 싶습니다.다음은 작동하지 않으며 구문 오류를 반환합니다.

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

도움이 되었습니까?

해결책

그것을 발견!옵션을 추가해야 했어요 key:'string' 변수 이름을 'id' 대신 'string'으로 변경합니다.

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

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

다른 팁

사용하지 않는 것이 가장 좋은 방법이라고 생각합니다 sortable('serialize') 하지만 jQuery를 사용하면 다음과 같이 정렬된 ID를 간단히 반복할 수 있습니다.

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 하나의 목록에서).대조적으로 직렬화된 정렬 가능 항목을 추가하면 원치 않는 '&'가 남게 됩니다.

뉴스 항목을 주문하고 페이지에서 이를 PHP 코드 "?id[]=2&id[]=3&id[]=1&id[]=4&id[]=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'});

이것도 효과가 있을 수 있어요 ;)

가장 좋은 방법은 var를 사용하는 것입니다. order = $('ul').sortable('serialize'); 기능은 다음 링크에 나와 있습니다.

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

PHP 파일에서 순서가 지정된 목록 데이터를 가져오는 데 필요한 것은 다음 코드뿐입니다.

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

"key" 매개변수와 관련하여 배열을 얻기 위해 대괄호를 사용했습니다.

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

해결책

나는 sortable('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에서 배열로 정렬을 원합니다
사용 구문 분석_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