代码之家  ›  专栏  ›  技术社区  ›  nielsv

Laravel cookie-不使用ajax请求删除

  •  0
  • nielsv  · 技术社区  · 7 年前

    我的数据库中有一个“想法”列表。每次用户点击一个按钮,就会显示一个新的随机想法(并添加到cookie中)。当没有想法时,按钮中会显示一条消息以重新开始(=删除cookie并获取随机想法)。

    到目前为止,上述方法仍然有效。问题是重新开始(=删除cookie并再次获得随机想法)。

    $.ajax({
        type: "POST",
        url: "/idea",
        data: { noideas: $("#noideas").val() },
        success: function(response) {
            if(response == false)
            {
                $(".card").fadeOut(function(){
                    $(this).remove();
    
                    $('<div class="card card-primary">' +
                        '<div class="card-header">' +
                        '<h3 class="card-title">Einde</h3>' +
                        '</div>' +
                        '<div class="card-body">U heeft alle ideeën bekeken.</div>' +
                        '</div>').appendTo('.content').fadeIn();
                });
    
                $("#noideas").val('true');
                $("#idea").text("Start opnieuw.");
            }
            else
            {
                $(".card").fadeOut(function(){
                    $(this).remove();
    
                    $('<div class="card card-primary">' +
                        '<div class="card-header">' +
                        '<h3 class="card-title">' + response.title + '</h3>' +
                        '</div>' +
                        '<div class="card-body">' + response.description +
                        '</div>' +
                        '</div>').appendTo('.content').fadeIn();
                });
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });
    

    在id为的输入字段中 诺伊迪斯

    在我的功能(在控制器中)中,我有:

    public function idea(Request $request)
    {
        $noideas = $request->input('noideas');
    
        // cookie
        $ideas = Cookie::get('ideas');
        $ideas = unserialize($ideas);
    
        $random_idea = Idea::whereNotIn('id', $ideas)->inRandomOrder()->first();
    
        if($random_idea)
        {
            if(!in_array($random_idea->id,$ideas))
            {
                $ideas[] = $random_idea->id;
            }
        }
        else
        {
            $random_idea = false;
        }
    
        Cookie::queue('ideas', serialize($ideas));
    
        if($noideas == "true")
        {
            Cookie::queue(
                Cookie::forget('ideas')
            );
    
            $ideas = array();
            $random_idea = Idea::whereNotIn('id', $ideas)->inRandomOrder()->first();
        }
    
        return response()->json($random_idea);
    }
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   IndianCoding    7 年前

    我猜想,当请求有“noidea”时,您在获得random_idea后忘记设置cookie,或者您忘记删除 #noideas .

    也:

    1. 你不需要检查 !in_array($random_idea->id,$ideas) ::whereNotIn('id', $ideas) .

    public function idea(Request $request)
    {
        $ideas = [];
    
        if(Cookie::has('ideas') && $request->input('noideas') != 'true'){
            $ideas = Cookie::get('ideas');
            $ideas = unserialize($ideas);
        }
    
        $random_idea = Idea::whereNotIn('id', $ideas)->inRandomOrder()->first();
    
        if($random_idea){
            $ideas[] = $random_idea->id;
            Cookie::queue('ideas', serialize($ideas));
        }
    
        return $random_idea;  //return json or null if no unique random idea was found
    }
    

    如果$random_idea不为空,Laravel将自动将$random_idea转换为json。然后,ajax:

    $.ajax({
        type: "POST",
        url: "/idea",
        data: { noideas: $("#noideas").val() },
        success: function(response) {
            if(response){   //reverse codition logic
                $(".card").fadeOut(function(){
                    $('.cart-title').text(response.title);    //I rewrite this part, because you don't need to remove element and render it every time
                    $('.cart-body').text(response.description);
                    $(this).fadeIn();
                });
    
                $("#noideas").val('false'); //remove true value
            } else {
                $(".card").fadeOut(function(){
                    $('.cart-title').text('Einde');
                    $('.cart-body').text('U heeft alle ideeën bekeken.');
                    $(this).fadeIn();
                });
    
                $("#noideas").val('true');
                $("#idea").text("Start opnieuw.");
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });