首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel SortableJS AJAX -如何重新排列顺序

Laravel SortableJS AJAX -如何重新排列顺序
EN

Stack Overflow用户
提问于 2019-12-29 07:10:27
回答 1查看 1.6K关注 0票数 2

我刚刚在我的Laravel项目中实现了SortableJS,并且想要重新排列一些元素的顺序。我有一个“块”的列表,其中所有的数据库字段都是"Order“,这是一个整数。我根据" order“字段的值以降序显示这些块。

现在,我想使用Ajax用SortableJS更新这些值。我如何才能做到这一点呢?

目前,我有一个简单的列表

代码语言:javascript
复制
<div class="block-order-list">
   @foreach($blocks as $block)
     <div class="list-group-item"><i class="far fa-arrows handle mr-3"></i> {{$block->name}}</div>
   @endforeach
</div>

调用一个Ajax请求,如下所示:

代码语言:javascript
复制
$('.block-order-list').sortable({
            animation: 150,
            handle: '.handle',
            store: {
                set: function (sortable) {
                    let order = sortable.toArray();
                    console.log(order);
                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        }
                    });
                    $.ajax({
                        url: '{{ route('change_order', ['url', $page->url]) }}',
                        type: 'POST',
                        data: order,
                        success: function(data){
                            console.log(data)
                        }
                    })
                }
            }
        });

添加到我的PageController,其中包含

代码语言:javascript
复制
 public function changeOrder($data)
    {

        return $data;
    }

请求现在只返回一个表示url的字符串,我觉得这很奇怪。在ajax请求的url中,我给出了一个名为URL的参数,我需要这个参数来查找附加到这个特定页面的块。我的块数据库表如下所示

我如何才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-29 07:27:03

我猜您必须在HTML列表中使用ID:

代码语言:javascript
复制
<div class="block-order-list">
   @foreach($blocks as $block)
     <div class="list-group-item" data-id="{{ $block->id }}>
          <i class="far fa-arrows handle mr-3"></i> {{ $block->name }}
     </div>
   @endforeach
</div>

然后在您的JS中,使用ID => order构建一个数组:

代码语言:javascript
复制
let order = {};
$('.list-group-item').each(function() {
    order[$(this).data('id')] = $(this).index();
});

然后在ajax调用中:

代码语言:javascript
复制
 $.ajax({
    url: '{{ route('change_order', ['url', $page->url]) }}',
    type: 'POST',
    data: {order: order},
    success: function(data){
        console.log(data)
    }
})

在你的控制器中:

代码语言:javascript
复制
public function changeOrder(Request $request)
{
    foreach($request->get('order') as $id => $order) {
        Block::find($id)->update(['order' => $order]);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59515642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档