【问题标题】:How to access laravel flash data/message in ajax?如何在 ajax 中访问 laravel flash 数据/消息?
【发布时间】:2017-01-16 01:22:49
【问题描述】:

我正在尝试访问 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,这将是正确的方式吗?如果有人指导我,我将不胜感激。谢谢。

【问题讨论】:

    标签: php ajax laravel laravel-5


    【解决方案1】:
    // in php
    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']); 
    }  
    
    // javascript, ajax success function
    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>');
        }
    }
    

    【讨论】:

      【解决方案2】:

      与其像@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-messages 子视图

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

      3.在您的主视图中: 在您希望 jquery 附加您的 flash 消息的位置放置一个空 div

      <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 代码也得到了简化,您也可以简单地在另一个页面上再次使用它。您唯一需要自定义的是您在控制器中整齐定义的消息内容!太棒了!

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 2021-05-28
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 2016-03-02
        相关资源
        最近更新 更多