如何在ajax中访问laravel flash数据/消息?

时间:2016-09-08 07:49:42

标签: php ajax laravel laravel-5

我正在尝试访问ajax请求中的laravel flash消息。我搜索了它有一些可用的解决方案,但我想在不重新加载页面的情况下显示它们。

我正在尝试的内容:

在我的控制器中,我正在设置Flash消息

Session::flash('success', 'Record has been inserted successfully'); 

return response()->json([
    'success' => 'ok' // for status 200
]);

在Ajax中

success: function(data){
    if(data.success){
        // reload the current page
        window.location.href = 'http://localhost/Framework/augLaravel3/public/index.php/user/add'; 
    }
}

在视图中

 @if (Session::has("success"))
   {{ Session::get("success") }}
 @endif

上面的代码工作正常,我只想删除重新加载步骤,因为如果我通过ajax显示消息(没有页面重新加载),我认为它对于复杂或大型应用程序会更方便。但是因为我是laravel的新手所以我不知道我可以将session::flash转换为json吗?

任何人都可以指导我这个,它可能吗?如果我们在ajax中访问session::flash,这将是正确的方法吗?如果有人指导我,我很感激。谢谢。

2 个答案:

答案 0 :(得分:3)

而不是像@Abbbas khan建议的那样使用服务器的响应来硬编码html,我宁愿返回flash消息的子视图,并且可以在任何页面上重用该子视图。

<强> 1。创建您的Flash消息子视图: 创建partials / flash-messages.blade.php

@if( Session::has("success") )
<div class="alert alert-success alert-block" role="alert">
    <button class="close" data-dismiss="alert"></button>
    {{ Session::get("success") }}
</div>
@endif

//Bonus: you can also use this subview for your error, warning, or info messages 
@if( Session::has("error") )
<div class="alert alert-danger alert-block" role="alert">
    <button class="close" data-dismiss="alert"></button>
    {{ Session::get("error") }}
</div>
@endif

<强> 2。在你的控制器中: 定义所需的成功消息并返回flash消息子视图

use Session;
use View;

Session::flash('success', 'File has been uploaded successfully!');
return View::make('partials/flash-messages');

第3。在您的主视图中: 在你想要jquery的位置放置一个空div来附加你的flash消息

<div class="flash-message"></div>

<强> 4。在你的ajax代码中: 将您的子视图作为html响应传递并将其附加到上面定义的div

$.ajax({
    ...
    dataType: 'html', //Optional: type of data returned from server
    success: function(data) {
        $('div.flash-message').html(data);
    },
    ...
});

<强> 5。为什么我喜欢这种方法: 使用此服务器端方法,您可以准备好在任何页面上重用您的Flash消息。您的ajax代码也得到了简化,您也可以在另一个页面上重复使用它。您需要自定义的唯一内容是您在控制器中整齐定义的消息内容!真棒!

答案 1 :(得分:0)

    if ($Validator->fails()) { 
                return Response::json([
                    'message'=>'you have not inserted',
                    'error' =>$Validator->errors()->toArray()
                ]);

        }
        else{

            $this->flight->name = $request->name;
            $this->flight->detail = $request->detail; 
            $this->flight->save();
             return Response::json([
                    'message'=>'you have inserted']); 
        }

in ajax as

     success: function(data){ 
     if(data.error){
     $('#main').html('<div class="alert alert-danger col-ssm-12" >' + data.message + '</div>');
  $('#nameid').html('<div class="alert alert-danger col-sm-12" >' + data.error.name + '</div>');
 $('#detailid').html('<div class="alert alert-danger col-sm-12">' + data.error.detail + '</div>');
                   // location.reload('/');
                                          }
   else{
                 $('#main').html('<div class="alert alert-info col-ssm-12" >' + data.message + '</div>');
                               }


 }