如何通过ajax发送错误/成功消息,而无需单击laravel中的表单(如果没有表单)中的提交按钮?

时间:2019-01-03 12:21:38

标签: javascript ajax laravel

如何通过ajax发送错误/成功消息而无需单击表单中的提交按钮(如果没有表单)?

我在这里做一个laravel项目,当用户将表单提交到控制器(通过表单的action属性)提交表单时,我使用了该方法,并且在controller函数内部,它可以返回带有数据的视图并重定向页面,错误/成功消息将显示,并且页面将被刷新。

return redirect()->back()->with('success', 'Successfully Added!'); 

但是这种情况是我想单击一个按钮,如果没有表单,也会发生同样的事情。我在按钮上添加了onclick并运行js函数以通过ajax调用控制器。但是在调用控制器之后,上面的代码无法像以前那样工作。也没有错误。

<button type="button"  onclick="submit()" class="btn btn-primary"
>Submit</button> 

<script>
//when click submit button
    function submit(){
        var _token = $('input[name="_token"]').val();
        $.ajax({
            url: "{{ route('RecipeController.submit') }}",
            type: "POST",               
            data: { _token:_token                                     
            }
        })   
    }
</script>

有人可以给我解决方案吗?

如果需要,我在下面添加了消息代码。

@if(count($errors)>0)
@foreach($errors->all() as $error)
    <div class="alert alert-danger">    
        {{$error}}
    </div>    
@endforeach
@endif

@if(session('success'))
<div class="alert alert-success">
    {{session('success')}}        
</div>    
@endif

@if(session('error'))
<div class="alert alert-danger">
    {{session('error')}}        
</div>    
@endif

3 个答案:

答案 0 :(得分:0)

Ajax通常期望使用JSON,因此正常的重定向或视图将不起作用。

我可以举个例子:

    return response()->json(['error' => 'there was an error...'], 200);

第一个参数是一个包含数据的数组。第二个是http状态。

希望它可以帮助您解决问题。 :)

编辑:现在我有了您的留言代码。

您只需在ajax成功的情况下使用js动态添加div。

答案 1 :(得分:0)

public List<string> searchvalues(string searchname)
    {
        try
        {
            List<string> result = new List<string>();
            string connectionstring = @"Data Source=DESKTOP-LTV06QJ\SQLEXPRESS;Initial Catalog=Search;Integrated Security=True";
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "connection_string";
            conn.Open();
            SqlCommand cmd = new SqlCommand("Sp_Search", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Emp_Name", searchname);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                result.Add(string.Format("{0}/{1}", dr["Emp_id"], dr["Emp_Name"]));
            }
            conn.Close();
            return result;
        }

        catch (Exception ex)
        {
            return null;
        }


    }

路由应定义为

 $(document).ready(function() {
               $(".removeproduct").click(function(){

                   $.ajax({
                       headers: {
                           'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                       },
                       type : 'DELETE',
                       url  : '/user/'+report_id+'/removefromcart',
                       data  : {report_id : report_id},
                       success:function(data)
                       {
                           console.log(data);
                      },
                       error : function(data)
                       {
                           console.log(data);
                       }
                     });


                   });
               }) ;

答案 2 :(得分:0)

public function removeFromCart(Request $request, $report_id)
{

    $return = array();


        $check = DB::delete("DELETE FROM carts WHERE user_id='" . Auth::user()->user_id . "' AND report_id='" . $report_id . "'");
        if ($check) 
        {

            $count = Cart::where('user_id', Auth::user()->user_id)->count('id');
            $return = array('success' => true, 'message' => 'Item removed to cart', 'data' => $count);
            return response()->json($return);
        }

    } 


}