رفتن به مطلب
انجمن پشتیبانی لاراول ایران

Recommended Posts

سلام

من میخوام برای نمایش لیست اعضای یه کلاس از Yajra Datatables استفاده بکنم ولی برای ارسال و دریافت داده ازش به مشکل خوردم.

ببینید اگر مسیر اینطوری باشه:

Route::GET('/members', 'ClassController@member')->name('class.member');

و اینطوری بریم به مسیر:

     <a href="{{route('message.list')}}"
                               class="btn btn-lg btn-block  btn-success">Messages</a>
                       

درست کار میکنه! ولی خب واضحه که من نیاز دارم id  کلاس رو هم pass بکنم.

وقتی مسییر رو به این شکل تغییر میدم:

Route::GET('/members/{id}', 'ClassController@member')->name('class.member');

این ایرور رو به صورت alert نمایش میده

DataTables warning: table id=student_table - Invalid JSON response.

سعی هم کردم که ایرور ajax رو چک بکنم ولی چیز خاصی نصیبم نشد.

و مشکل بعدی هم اینه که باید id کلاس رو هم برای دریافت داده هم برای عملیات حذف ارسال بکنم! البته اولش باید بتونم بفرستمش برای view.

<script type="text/javascript">
    $(document).ready(function () {
        $('#student_table').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax": "{{route('class.member_list')}}",
            "columns": [{"data": "first_name", orderable: true, searchable: true},
                {"data": "last_name", orderable: true, searchable: true},
                {"data": "email", orderable: false, searchable: false},
                {"data": "created_at", orderable: true},
                {"data": "action", orderable: false, searchable: false}
            ]
        });

        $(document).on('click', '.delete', function () {
            var id = $(this).attr("id");
            console.log(id);
            const swalWithBootstrapButtons = Swal.mixin({
                customClass: {
                    confirmButton: 'btn btn-success',
                    cancelButton: 'btn btn-danger'
                },
                buttonsStyling: false
            })
            swalWithBootstrapButtons.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonText: 'Yes, delete it!',
                cancelButtonText: 'No, cancel!',
                reverseButtons: true
            }).then((result) => {
                if (result.value) {
                    $.ajax({
                        url: "{{route("class.delete_member")}}",
                        method: "get",
                        data: {id: id},
                        success: function (data) {
                            $('#student_table').DataTable().ajax.reload();
                        },
                        error: function (data) {
                            console.log('Error:', data);
                        }
                    })
                    swalWithBootstrapButtons.fire(
                        'Deleted!',
                        'Your file has been deleted.',
                        'success'
                    )
                } else if (
                    result.dismiss === Swal.DismissReason.cancel
                ) {
                    swalWithBootstrapButtons.fire(
                        'Cancelled',
                        'Your imaginary file is safe :)',
                        'error'
                    )
                }
            })
        });
    })
</script>

اگر قسمت دیگه ای از کد هم نیازه لطفا بگید که بذارم.

پیشاپیش از هر کمکی تشکر میشود

Share this post


Link to post
Share on other sites

احتمال زیاد مشکل از متد کنترلر هست که اطلاعات رو باید به شکل json برگردونه

کدهایی رو که در کنترلر برای دریافت لیست اعضا نوشتید قرار بدید ببینیم چی نوشتید

Share this post


Link to post
Share on other sites

route:

Route::GET('/members/{id}', 'ClassController@member')->name('class.member');

Route::GET('members/list', 'ClassController@member_list')->name('class.member_list');

link:

<a href="{{route('class.member', ['id' => $class->id])}}"
                               class="btn btn-lg btn-block  btn-success">Members</a>

کنترلر:

public function member($id)
    {
        $class = Classroom::where('id', $id)->first();
        return view('class.Show_Member', compact('class'));
    }

    public function member_list(Request $request)
    {
        $user = \DB::table('scs')
            ->join('users', 'scs.user_id', '=', 'users.id')
            ->where('classroom_id', $request->input('id'))
            ->get();
        return DataTables::of($user)
            ->addColumn('action', function ($user) {
                return '<a href="#" class="btn btn-xs btn-danger delete" id=" ' . $user->id . ' ">Delete</a>';
            })
            ->make('true');
    }

script:

<script type="text/javascript">
    $(document).ready(function () {
        var id={{$class->id}};
        $('#student_table').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax":({
                url: "{{route("class.member_list")}}",
                method: "get",
                data: {id: id},
                "columns": [{"data": "first_name", orderable: true, searchable: true},
                    {"data": "last_name", orderable: true, searchable: true},
                    {"data": "email", orderable: false, searchable: false},
                    {"data": "created_at", orderable: true},
                    {"data": "action", orderable: false, searchable: false}
                ]
            }),
        });

        $(document).on('click', '.delete', function () {
            var id = $(this).attr("id");
            console.log(id);
            const swalWithBootstrapButtons = Swal.mixin({
                customClass: {
                    confirmButton: 'btn btn-success',
                    cancelButton: 'btn btn-danger'
                },
                buttonsStyling: false
            })
            swalWithBootstrapButtons.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonText: 'Yes, delete it!',
                cancelButtonText: 'No, cancel!',
                reverseButtons: true
            }).then((result) => {
                if (result.value) {
                    $.ajax({
                        url: "{{route("class.delete_member")}}",
                        method: "get",
                        data: {id: id},
                        success: function (data) {
                            $('#student_table').DataTable().ajax.reload();
                        },
                        error: function (data) {
                            console.log('Error:', data);
                        }
                    })
                    swalWithBootstrapButtons.fire(
                        'Deleted!',
                        'Your file has been deleted.',
                        'success'
                    )
                } else if (
                    result.dismiss === Swal.DismissReason.cancel
                ) {
                    swalWithBootstrapButtons.fire(
                        'Cancelled',
                        'Your imaginary file is safe :)',
                        'error'
                    )
                }
            })
        });
    })
</script>

 

Share this post


Link to post
Share on other sites
در 12 ساعت قبل، saber گفته است :

احتمال زیاد مشکل از متد کنترلر هست که اطلاعات رو باید به شکل json برگردونه

کدهایی رو که در کنترلر برای دریافت لیست اعضا نوشتید قرار بدید ببینیم چی نوشتید

کد ها رو قرار دادم. پیشاپیش ممنون از کمکتون

Share this post


Link to post
Share on other sites
در 2 ساعت قبل، HASSSSAN گفته است :

route:


Route::GET('/members/{id}', 'ClassController@member')->name('class.member');

Route::GET('members/list', 'ClassController@member_list')->name('class.member_list');

link:


<a href="{{route('class.member', ['id' => $class->id])}}"
                               class="btn btn-lg btn-block  btn-success">Members</a>

کنترلر:


public function member($id)
    {
        $class = Classroom::where('id', $id)->first();
        return view('class.Show_Member', compact('class'));
    }

    public function member_list(Request $request)
    {
        $user = \DB::table('scs')
            ->join('users', 'scs.user_id', '=', 'users.id')
            ->where('classroom_id', $request->input('id'))
            ->get();
        return DataTables::of($user)
            ->addColumn('action', function ($user) {
                return '<a href="#" class="btn btn-xs btn-danger delete" id=" ' . $user->id . ' ">Delete</a>';
            })
            ->make('true');
    }

script:


<script type="text/javascript">
    $(document).ready(function () {
        var id={{$class->id}};
        $('#student_table').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax":({
                url: "{{route("class.member_list")}}",
                method: "get",
                data: {id: id},
                "columns": [{"data": "first_name", orderable: true, searchable: true},
                    {"data": "last_name", orderable: true, searchable: true},
                    {"data": "email", orderable: false, searchable: false},
                    {"data": "created_at", orderable: true},
                    {"data": "action", orderable: false, searchable: false}
                ]
            }),
        });

        $(document).on('click', '.delete', function () {
            var id = $(this).attr("id");
            console.log(id);
            const swalWithBootstrapButtons = Swal.mixin({
                customClass: {
                    confirmButton: 'btn btn-success',
                    cancelButton: 'btn btn-danger'
                },
                buttonsStyling: false
            })
            swalWithBootstrapButtons.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonText: 'Yes, delete it!',
                cancelButtonText: 'No, cancel!',
                reverseButtons: true
            }).then((result) => {
                if (result.value) {
                    $.ajax({
                        url: "{{route("class.delete_member")}}",
                        method: "get",
                        data: {id: id},
                        success: function (data) {
                            $('#student_table').DataTable().ajax.reload();
                        },
                        error: function (data) {
                            console.log('Error:', data);
                        }
                    })
                    swalWithBootstrapButtons.fire(
                        'Deleted!',
                        'Your file has been deleted.',
                        'success'
                    )
                } else if (
                    result.dismiss === Swal.DismissReason.cancel
                ) {
                    swalWithBootstrapButtons.fire(
                        'Cancelled',
                        'Your imaginary file is safe :)',
                        'error'
                    )
                }
            })
        });
    })
</script>

 

من الان ایرور ajax رو چک کردم، این ایرور رو میده:

Trying to get property of non-object

به همراه شماره ی این خط از کد:

var id={{$class->id}};

ولی خب توی کنسول مقدار id رو درست چاپ میکنه!

وقتی هم که کد رو به این شکل تغییر میدم:

var id=74;

ایرور ajax این شکلی میشه:456.thumb.JPG.199f9663a7ef9ec9f806bfea52b5525c.JPG

Share this post


Link to post
Share on other sites

یکی از اشکالاتی که کدتون داره این هست که قسمت columns رو در داخل ایجکس قرار دادید باید خارج از کد ایجکس قرار بدید که به شکل زیر میشه

$(document).ready(function () {
        var id={{$class->id}};
        $('#student_table').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax":({
                url: "{{route("class.member_list")}}",
                method: "get",
                data: {id: id}
            }),
            columns : [
                    {"data": "first_name", orderable: true, searchable: true},
                    {"data": "last_name", orderable: true, searchable: true},
                    {"data": "email", orderable: false, searchable: false},
                    {"data": "created_at", orderable: true},
                    {"data": "action", orderable: false, searchable: false}
                ]
        });

 

Share this post


Link to post
Share on other sites
در 1 ساعت قبل، saber گفته است :

یکی از اشکالاتی که کدتون داره این هست که قسمت columns رو در داخل ایجکس قرار دادید باید خارج از کد ایجکس قرار بدید که به شکل زیر میشه


$(document).ready(function () {
        var id={{$class->id}};
        $('#student_table').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax":({
                url: "{{route("class.member_list")}}",
                method: "get",
                data: {id: id}
            }),
            columns : [
                    {"data": "first_name", orderable: true, searchable: true},
                    {"data": "last_name", orderable: true, searchable: true},
                    {"data": "email", orderable: false, searchable: false},
                    {"data": "created_at", orderable: true},
                    {"data": "action", orderable: false, searchable: false}
                ]
        });

 

این کار رو هم کردم، درست نشد.

 

Share this post


Link to post
Share on other sites
در 1 ساعت قبل، HASSSSAN گفته است :

این کار رو هم کردم، درست نشد.

 

اون یکی از اشکالاتش بود مشکل بعدی هم متد member_list رو به شکل زیر تغییر بدید

public function member_list(Request $request)
{
$users = \DB::table('scs')
->join('users', 'scs.user_id', '=', 'users.id')
->where('classroom_id', $request->input('id'))
->get();
return DataTables::of($users)
->addColumn('action', function ($user) use ($users){
return '<a href="#" class="btn btn-xs btn-danger delete" id=" ' . $user->id . ' ">Delete</a>';
})
->make('true');
}

 

 

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...