کمال
6 سال پیش توسط کمال مطرح شد
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'));
        }
    }

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

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


ثبت پرسش جدید
Igo
@Igo 6 سال پیش مطرح شد
0

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


کمال
تخصص : برنامه نویس ارشد وب
@kamalj 6 سال پیش آپدیت شد
0

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


Igo
@Igo 6 سال پیش مطرح شد
1

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


سیروس فخری
تخصص : دولوپر
@siros.fakhri 6 سال پیش مطرح شد
0

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


محمدرضا عطوان
تخصص : Full-Stack Developer &amp;amp;...
@mratwan 6 سال پیش آپدیت شد
1

خب شما وقتی بش میگی 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 6 سال پیش مطرح شد
0

@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 6 سال پیش مطرح شد
0

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


Igo
@Igo 6 سال پیش آپدیت شد
0

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

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

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

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


کمال
تخصص : برنامه نویس ارشد وب
@kamalj 6 سال پیش مطرح شد
0

@Igo
@sadeghiphp

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


محمدرضا عطوان
تخصص : Full-Stack Developer &amp;amp;...
@mratwan 6 سال پیش آپدیت شد
1

شما وقتی داری اطلاعاتت رو با ایجکس درخواست میکنی از اون 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;
        }

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

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