ARON
3 سال پیش توسط ARON مطرح شد
5 پاسخ

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

من با اجکس ای دی استان رو میفرستم به متدی در یک کنترلر بعد شهر های اون استان رو میگیرم میخوام برگردونم به ویو و اونجا تو selectbox لود کنم
چطور میتونم این لیستو بفرستم و اونطرف لود کنم

   $province = Provience::whereId($request['provience_id'])->first();
        $cities = $province->cities;

ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 3 سال پیش مطرح شد
0

چون تگ نکرده بودید اعلانات نمایش نداده بود پیامتون رو برام

چه پردازشی مد نظرتونه عزیز
اگر داده رو میخوایی بفرستی با متد toArray میتونی به آرایه تبدیلش کنی و return کنیش و توی success مربوط به ajax دریافت و هر پردازشی ک میخوایی انجام بدی
سوالتون رو لطفا کامل تر توضیح بدید چی میخوایید
اگر فقط میخوایی داخل select box قرار بدی و مشکلت اینه یه مثال الان برات میزارم ببین
موضوع سر اینه ک فقط شما داده هاتون رو جمع اوری کنید به صورت آرایه با ترکیب مناسب
سمت کاربر ب شکل زیر با حلقه داده رو با id و نام و هر چیزی ک مد نظر طراحیته قرار بدی


    $.ajax({
        type:'GET',
        url:'/users/all-permissions',
        success:function (data){
            var role_options='';
            for(const permission of data){
                role_options+=`<option value="${permission['id']}">${permission['label']}</option>`;
            }
            $('#permissions_select').html(role_options);
            $('#permissions_select').selectpicker('refresh');
        }
    })

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 3 سال پیش مطرح شد
0

سلام دوست عزیز
بسیار راحت
اول این که باید درخواست ajax بدی و در جوابش هر مقداری که میخوایی رو دریافت کنی همونطور که گفتی
خب چطور ؟
اینجوری که اول از همه باید مشکل csrf token رو برای درخواست های خودت (اگر تمایل داری که متد post باشه ) حل کنی
توی هدر ویو خودت از تگ زیر استفاده کن

<meta name="csrf-token" content="{{ csrf_token() }}">

در مرحله ی بعد درخواست ajax باید از csrf استفاده کنه دیگ
من پیشنهاد میکنم مثل من از تابع زیر در فایل js خودت استفاده کنی اگر نه هم که ب صورت دستی برای هر ajax باید مشخص کنی

    function ajax_header(){
        return $.ajaxSetup({
            headers:{
                'X-CSRF-TOKEN':document.head.querySelector('meta[name="csrf-token"]').content,
                'Content-Type':'application/json'
            }
        })
    }

مرحله ی اخر هم خیلی راحت مثب همه ی درخواست های ajax به ادرس روتی که برای اون متد کنترلرت تعریف کردی درخواستی میدی
اگر متدت get باشه نیاز به ajaxheader نداری
مثال زیر رو میتونی ببینی

            ajax_header()
            var data={
                search:$('#customer-phone-input').val()
            };
            $.ajax({
                type:'POST',
                url:'/customers/phone',
                data:JSON.stringify(data),
                success:function (data){
                    fill_customer_suggest_box(data)
                }
            })

ARON
تخصص : برنامه نویس
@aron 3 سال پیش مطرح شد
0

مرسی که وقت گذاشتی
ولی موضوع این نبود
درخواستم رو که میفرستم و سمت سرور دریافت میکنم جواب رو میخواستم برگردونم میخواستم ببینم میشه سمت سرور پردازش نکنم بیارم تو جی کوئری پردازش کنم یا نه


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 3 سال پیش مطرح شد
0

چون تگ نکرده بودید اعلانات نمایش نداده بود پیامتون رو برام

چه پردازشی مد نظرتونه عزیز
اگر داده رو میخوایی بفرستی با متد toArray میتونی به آرایه تبدیلش کنی و return کنیش و توی success مربوط به ajax دریافت و هر پردازشی ک میخوایی انجام بدی
سوالتون رو لطفا کامل تر توضیح بدید چی میخوایید
اگر فقط میخوایی داخل select box قرار بدی و مشکلت اینه یه مثال الان برات میزارم ببین
موضوع سر اینه ک فقط شما داده هاتون رو جمع اوری کنید به صورت آرایه با ترکیب مناسب
سمت کاربر ب شکل زیر با حلقه داده رو با id و نام و هر چیزی ک مد نظر طراحیته قرار بدی


    $.ajax({
        type:'GET',
        url:'/users/all-permissions',
        success:function (data){
            var role_options='';
            for(const permission of data){
                role_options+=`<option value="${permission['id']}">${permission['label']}</option>`;
            }
            $('#permissions_select').html(role_options);
            $('#permissions_select').selectpicker('refresh');
        }
    })

ARON
تخصص : برنامه نویس
@aron 3 سال پیش مطرح شد
0

@salar.mohammad2013 همین کاری که شما انجام دادی رو من تو کنترلر انجام دادم و فرستادم ویو و نمایش دادم
ولی دنبال همین کاری بودم که شما کردی ممنون به نظرم تمیز تر و بهتره


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 3 سال پیش مطرح شد
1

اره
ولی کلا جدای از تمیزی هر پردازش اینچنینی ک امکان انجامش سمت کاربر هست رو توی مرور گر انجام بدید تا سرعت سرور بالا تر بره و الکی درگیر نشه
یه مورد دیگه هم ک شاید ب کارتون بیاد اگر اطلاعاتی رو از سمت سرور میگیری و جایی نمایش میدی گاهی ب دلیل همزمانی اتفاقات میبینی درخواست ajax بعد از کاری که خواستی جواب داده و فیلد مورد نظرت دیرتر مقدار گرفته
توی این مواقع توی done از ajax مراحل بعدیت رو یاد داشت کن
مثالی که بخوام برات بزنم من کلی اطلاعات یک سفارش رو دریافت میکنم و توی یک modal میریزم
توی success درخواست باز شدن مودال رو میدم modal('show') اما چون درخواست من دیر جواب میده از سمت سرور
مودال من باز میشه و ب چشم میبینم که داده ها نشست سر جای مربوط به خودش
توی این شرایط باز شدن مودال رو در پایان کار ajax قرار میدم

    $(document).on('click','.show_order',function (){
        ajax_header();
        var data={
            current_order_id:$(this).attr('order_id'),
            status:'specific-order'
        }
        $.ajax({
            type:'POST',
            url:'/orders/specific',
            data:JSON.stringify(data),
            success:function (data){
                if(data!='not find'){
                    console.log(data)
                    var rows='';
                    var bonded_rows='';
                    for (var index in data['products']){
                        var product=data['products'][index];
                        console.log(product);
                        var row=
                            '<tr>' +
                            '<td>'+product.name+'</td>' +
                            '<td>'+product['pivot'].price+'</td>' +
                            '<td>'+product['pivot'].count+'</td>' +
                            '<td>'+(parseInt(product['pivot'].price)*parseInt(product['pivot'].count))+'</td>' +
                            '</tr>';
                        if (product.is_bonded=='yes'){
                            bonded_rows+=row;
                        }else {
                            rows+=row;
                        }

                    }
                    if (rows==''){
                        rows='<tr>' +
                            '<td colspan="4">محصولی جهت نمایش وجود ندارد</td>'+
                            '</tr>';
                    }
                    if (bonded_rows==''){
                        bonded_rows='<tr>' +
                            '<td colspan="4">محصول امانی جهت نمایش وجود ندارد</td>'+
                            '</tr>';
                    }
                    $('#has-bonded-table tbody').html(bonded_rows);
                    $('#factor-table tbody').html(rows);

                    $('#order-user-creator').text(data['user'].name);
                }
            }
        }).done(function (){
            $('#show-factor-modal').modal('show');
        })
    })

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام