راکت

رفتن به کنترلر و بازگشت با ویو بدون رفرش

10 پاسخ

دوستان من یک پروژه دارم میره با کلیک روی دکمه سرچ میره دنبال یک راننده میگرده
در ویو

@if($order->accept == ۱)
    <script>
        window.setTimeout(function () {
            window.location.href = "http://localhost:۸۰۰۰/confirmed/{{$order->id}}";
        }, ۱۲۰۰۰);
    </script>
@endif

بهش میگم برو به کنترلر مربوطه و نتیجه رو بفرست

در کنترلر

public function confirmed($order_id)
    {
        $order = Order::find($order_id);
        if ($order->accept == ۴) {

            $message = '';
            return view('trip.html.trip', compact('order', 'message'));

        } else {
            return view('trip.html.trip', compact('order'));
        }
    }

میره چک های لازمه را انجام میده و برمیگردونه

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

ثبت پرسش جدید

پاسخ‌ها

10
Igo
Igo
@Igo

سلام
من منطق کدهاتون رو متوجه نمیشوم چرا دارید از setTimeout استفاده میکنید مگه قرار نیست کاربر روی دکمه جسجتو کلیک کنه؟؟؟؟ خوب وقتی روی دکمه کلیک کرد توی رویداد کلیک دکمه یه درخواست Ajax بفرستین.
توی کنترولر هم شما View رو برمیگردونید در صورتی که باید یک آبجکت در قالب json بفرستید.

کمال
کمال
@kamalj

تخصص: برنامه نویس ارشد وب

@Igo
نه بدین صورت است که کاربر یکبار روی دکمه جستجو کلیک میکنه
حالا صفحه میره به کنترلر و اکشن check رو اجرا میکنه و یکی یکی راننده را خبر میکنه
هر کدوم که رد میکنن به طور خودکار صفحه رفرش میشه و و اطلاعات ارسال میشه برا راننده بعدی
و دوباره اطلاعات اردر به صفحه ویو فرستاده میشه اگر راننده تایید کرده باشه ادرد accep =1 میشه و اطلاعات نشون داده میشه در غیر این صورت accept = 0 است و دوباره به صفحه مورد نظر ریدایرکت میشه

شاید پاسخ شما همین‌جا باشد

Igo
Igo
@Igo

اول اینکه شما وقتی به صورت Localhost آدرس دهی میکنی بعدا که پروژه رو آپلود کردی دیگه Localhost معنی نداره
دوم اینکه کاربردlocation.href اینجا نیست. به جای location.href باید درخواست Ajax بفرستی
سوم هم توی اکشن ب جای View باید Json برگردونی

سیروس فخری
سیروس فخری
@siros.fakhri

تخصص: دولوپر

lgo@ من تموم این کارا کردم باز نمیتونم
شما یه کد ساده ک اینکار رو بکنه دارین؟
فقط با ایجکس مطالب بخونه نه ساده که با retirn view انجام میدیم

محمدرضا عطوان
محمدرضا عطوان
@mratwan

تخصص: Full-Stack Developer &amp;amp; AI Lover

خب شما وقتی بش میگی window.href یعنی میخوای که صفحه عوض شه!
شما این امکان رو به راحتی می تونی با $.ajax و یا $.post پیاده سازی کنی
خیلی سادس
برای نمونه کد ها هم میتونی سری به سایت اصلی jquery بزنی
در کل شما یه $order->id رو میفرستی به کنترلر و بعد از چک شدن فقط return میکنی بدون نمایش ویو!
بعدش json دریافت شده رو تحلیل میکنی در هون صفحه
این کد رو برات آماده کردم
ازش استفاده کن

<script>
    function getDetail(order_id)
    {
        $.ajax({
            type: "GET",
            url: "site.com/order/{{ $order->id }}",
            dataType : 'json',
            success: function(data)
            {
               // انجام عملیات مورد نظر در صورت موفقیت
            },
            error : function(data)
            {
                // انجام عملیات مورد نظر در صورت ارور و یا نبود جواب درست
            }
        });
        return false;
    }
</script>
کمال
کمال
@kamalj

تخصص: برنامه نویس ارشد وب

@mratwan
با تشکر از شما
من اینها رو نوشتم

<input type="text" id="order">

نتیجه این است :
@if($order->accept == 1)
    <h1>اردر ما یک است</h1>

@elseif($order->accept == 2)
    <h2>اردر ما 2 است</h2>
@elseif($order->accept == 3)
    <h3>اردر ما 3 است</h3>
@endif

<script src="/js/app.js"></script>
<script>
    setInterval(getDetail,5000);

    function getDetail(order_id)
    {
        $.ajax({
            type: "GET",
            url: "http://localhost:8000/check/{{$order->id}}",
            dataType : 'json',
            success: function(data)
            {
               $('#order').val(data.accept);
            },
            error : function(data)
            {

            }
        });
    }
</script>

و در کنترلر

    public function index()
    {
        $order = Order::find(1);
       return view('index',compact('order'));
    }

    public function check($id){
        $order = Order::find($id);
        return Response::json($order);
       // return view('index',compact('order'));
    }

اما حالا میتونم مقدار order را داخل input بگیرم و نمیتونم توی php چک کنم
باید چیکار کنم که شروط ویو کار کنند ؟

حامد صادقی
حامد صادقی
@sadeghiphp

تخصص: برنامه نویس

وقتی می خواهی به صورت ایجکس کار کنی فقط بار اول کد های php درون ویو کار میکنه یعنی فقط یک بار بعد از رفرش مرورگر حالا بعد از این اجرا بقه کار ها رو باید با جاوا اسکریپت انجام بدی . توی تابع success همون جایی که order را گرفتی یک شرط قرار بده و تگ های h1 , h2 , h3 را با توجه به اون مخفی کن یا نمایش بده . یا اینکه کلا تک رو با جاوا اسکریپت بساز و به صفحه اضافه کن

Igo
Igo
@Igo

خوب فقط یک المنت h1 نیاز داری.
برای اینکار برای همونطوری که مقدار input رو تغییر دادی باید مقدار المنت h1 رو هم عوض کنی.

$("h1").innerText=data.accept

البته کنترول و انجام این کارها هم اشتباهه هم وقت گیر
بهتره از یکی از فریم ورک های Angular و Vue و یا React استفاده کنی که خودشون تغییرات رو رهگیری میکنند.

توی تابع ajax هم type رو POST بزار.

کمال
کمال
@kamalj

تخصص: برنامه نویس ارشد وب

@Igo
@sadeghiphp

دوستان به این سادگی که شما میگید نیست
من دارم روی یک پروژه بزرگ کار میکنم
قراره اگر aacept = 1 شد یک سری مشخصات بیاد
اگر 2 شد یک سری دیگه
اگه 3 شد یک سری دیگه
و ...
ولی برای سوال پرسیدن و اینکه شما گیج نشید این کار رو کردم
من بر اساس هر وضعیت یک ویو رو باید لود کنم
مشکل اینجاست که نمیشه متغیر جاواسکریپت رو ریخت توی php

محمدرضا عطوان
محمدرضا عطوان
@mratwan

تخصص: Full-Stack Developer &amp;amp; AI Lover

شما وقتی داری اطلاعاتت رو با ایجکس درخواست میکنی از اون url دیگه نیازی نیست که دوباره تو لاراول بش بگی اگه این بو د و اگه اون بود اون کارو کن
باید در قسمت success جاوا اسکریپت وقتی اطلاعات رو میگیره براش شرط بذاری

function getDetail(order_id)
        {
            $.ajax({
                type: "GET",
                url: "site.com/order/{{ $order->id }}",
                dataType : 'json',
                success: function(data)
                {
                   var order = JSON.parse(data);
                   if(order->name == 1)
                   {
                       $("#YourTag").html("H1 is selected");
                       // or
                       $("#YourInput").val("H1 Value");
                   }

                },
                error : function(data)
                {
                    // انجام عملیات مورد نظر در صورت ارور و یا نبود جواب درست
                }
            });
            return false;
        }

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

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