使用ajax jquery的laravel消息闪烁

Posted

技术标签:

【中文标题】使用ajax jquery的laravel消息闪烁【英文标题】:Message flash with laravel using ajax jquery 【发布时间】:2018-01-22 23:09:59 【问题描述】:

我有一个带有消息会话闪存的函数 addProduct,我想使用 ajax jQuery 在 laravel 中通过会话闪存显示消息成功。

知道数据已保存到数据库而不显示闪烁消息

查看:

   <div class="col-md-12">
        @if(Session::has('message'))
         <p class="alert  Session::get('alert-class', 'alert-info') "> Session::get('message') </p>
      @endif
      @if(Session::has('alert-danger'))
      <p class="alert  Session::get('alert-class', 'alert-danger') "> Session::get('alert-danger') </p>
      @endif
      </div>
<script>
 $(document).ready(function() 
    $(document).on('click', "#add", function() 

        var codeProduct = $('#codeProduct').val();

            $.ajax(
              url: "addProduct",
              method: 'POST',
              data: 
                codeProduct: codeProduct
              ,
              success: function(data) 
              
            );
        
    );
</script>

控制器:

public function addProduct(Request $request)

        $product = new Product();
        $product->codeProduct = $request->codeProduct;
        $product->save();   

        Session::flash('success','Product Suucess!'); 

        return response()->json($product);
    

【问题讨论】:

【参考方案1】:

您可以创建一个数组来保存您想要从 JSON 请求返回的数据。例如,您可以有以下变量:

成功 留言 数据

所以你的代码看起来像这样:

public function addProduct(Request $request)
    $status = false
    $message = "";

    $product = new Product();
    $product->codeProduct = $request->codeProduct;

    if ($product->save())
        $status = true;
     else 
        $message = "The product failed to load!";
    

    return response()->json([
        'status' => $status,
        'message' => $message,
        'data' => $product
    ]);

然后从您的 AJAX 请求中,您可以从响应中获取数据以及成功状态和消息:

var codeProduct = $('#codeProduct').val();

        $.ajax(
          url: "addProduct",
          method: 'POST',
          data: 
            codeProduct: codeProduct
          ,
          success: function(data) 

              var status = data.status;
              var message = data.message;
              var product = data.data;

          
        );

    

【讨论】:

【参考方案2】:

像这样在成功函数中发出成功消息

这里忘记了控制器代码

if ($product->save()) 
   return response()->json(['data' => $product, 'success' => true, 'message' => 'success'], 200);
 else 
   return response()->json(['success' => false, 'message' => 'error'], 422);

首先,使用messages 类创建一个 div,然后使用 jquery 选择它

var messages = $('.messages');

现在创建一个名为successhtml 的变量并发出成功消息

var successHtml = '<div class="alert alert-success">'+
                '<button type="button" class="close" data-dismiss="alert">&times;</button>'+
                '<strong><i class="glyphicon glyphicon-ok-sign push-5-r"></</strong> '+ data.message +
                '</div>';

现在将successHtml 消息放入messages div

$(messages).html(successHtml);

所以你的代码应该是这样的

<div class="col-md-12">
        @if(Session::has('message'))
         <p class="alert  Session::get('alert-class', 'alert-info') "> Session::get('message') </p>
      @endif
      @if(Session::has('alert-danger'))
      <p class="alert  Session::get('alert-class', 'alert-danger') "> Session::get('alert-danger') </p>
      @endif
       <div class="messages"></div>
      </div>
<script>
 $(document).ready(function() 
    $(document).on('click', "#add", function() 

        var codeProduct = $('#codeProduct').val();

            $.ajax(
              url: "addProduct",
              method: 'POST',
              data: 
                codeProduct: codeProduct
              ,
              success: function(data) 
                var messages = $('.messages');

                var successHtml = '<div class="alert alert-success">'+
                '<button type="button" class="close" data-dismiss="alert">&times;</button>'+
                '<strong><i class="glyphicon glyphicon-ok-sign push-5-r"></</strong> '+ data.message +
                '</div>';

                $(messages).html(successHtml);

              
            );

        

    );
</script>

【讨论】:

有更好的方法吗?

以上是关于使用ajax jquery的laravel消息闪烁的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

登录后Laravel闪烁消息不显示在主路由中

jquery .ajax函数与Laravel-4无法正常工作

Jquery:使用 laravel 的跨域 ajax 'POST'

php 使用JQuery的Laravel AJAX分页

jQuery“闪烁突出显示”对div的影响?