Laravel 5.2:如何使用Ajax发布和删除数据


Laravel 5.2 : How to post and delete data Using Ajax?

我想使用Ajax发布一些数据,还想使用Ajax删除一些数据。但问题是在输入数据时,数据发布在数据库中。但我的UI面临一些问题,保存数据后,我的保存按钮总是点击。但当我使用Ajax时,它不应该加载,或者以前的数据应该自动消失。与删除相同,当删除数据时会被删除,但它正在重定向到另一个页面?

我该如何解决这个问题?

这是我的UserController代码:

<?php
namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use Illuminate'Http'Response;
use App'User;
use App'Post;
use Illuminate'Support'Facades'Storage;
class UserController extends Controller {
    public function postSignUp(Request $request) {
        $this->validate($request, [
            'name' => 'required|max:120',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:4'
        ]);
        $user = new User();
        $user->name = $request['name'];
        $user->email = $request['email'];
        $user->password = bcrypt($request['password']);
        $user->save();

        if ($request->ajax()) {
            return response()->json();
        }
    }
    public function delete(Request $request, $id) {
        $user = User::find($id);
        $user->delete($request->all());
    }
}
?>

这是我的文章数据查看页面:

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title>
        <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity = "sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
              crossorigin = "anonymous">
    </head>
    <body>
        <script src = "https://code.jquery.com/jquery-1.12.0.min.js"></script>
        <div class="container">
            <h2>Register Form</h2>
            <div class="row col-lg-5">

                <div class="form-group">
                    <label for="Name">Name</label>
                    <input type="text" class="form-control" id="name" placeholder="Name">
                </div>
                <div class="form-group">
                    <label for="Email">Email</label>
                    <input type="email" class="form-control" id="email" placeholder="Email">
                </div>
                <div class="form-group">
                    <label for="password">Password</label>
                    <input type="password" class="form-control" id="password" placeholder="Password">
                </div>
                <button type="submit" onclick="send(event)" class="btn btn-default" >Submit</button>
            </div>
        </div>

        <script type="text/javascript">
            function send(event) {
                event.preventDefault();
                $.ajax({
                    type: "POST",
                    url: "{{route('signup')}}",
                    data: {name: $("#name").val(),
                        email: $("#email").val(),
                        password: $("#password").val(),
                        _token: '{!! csrf_token() !!}'
                    }
                });
            }
        </script>
    </body>
</html>

这是我的删除数据视图页面:

<html>
    <head> 
        <title> User Details </title>
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
        <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
    </head>
    <body>
        <div class="container">
            <h3> User Details </h3>
            <table  class="table table-striped table-bordered"  id="example">
                <thead>
                    <tr>
                        <td>Serial No</td>
                        <td>User Name</td>
                        <td>User Email</td>
                        <td>Action</td>
                    </tr>
                </thead>
                <tbody>
                    <?php $i = 1; ?>
                    @foreach($user as $row)
                    <tr>
                        <td>{{$i}}</td>
                        <td>{{$row->name }}</td>
                        <td>{{$row->email}}</td>
                        <td>
                            <a href="#" class="edit">Edit</a> 
                            <div id="deleteTheProduct">
                                {!! Form::open([
                                'method' => 'POST',
                                'action' => ['UserController@delete',$row->id],
                                'style'=>'display:inline'
                                ]) !!}
                                {!! Form::hidden('id',$row->id)!!}
                                {!! Form::submit('Delete',['class'=>'btn btn-danger deleteUser','id' => 'btnDeleteUser', 'data-id' => $row->id]) !!}
                                {!!Form::close()!!}
                            </div>
                        </td>
                    </tr>
                    <?php $i++; ?>
                    @endforeach
                </tbody>
            </table>        
            <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
            <script type="text/javascript">
                $('.deleteUser').on('click', function (e) {
                    var inputData = $('#formDeleteUser').serialize();
                    var dataId = $(this).attr('data-id');
                    $.ajaxSetup({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        }
                    });
                    $.ajax({
                        url: '{{ url(' / delete') }}'
                        + '/' + dataId,
                        method: 'POST',
                        data: inputData,
                        success: function (data) {
                            console.log(data);
                        }
                    });
                });
            </script>
    </body>
</html>

为了防止重定向问题,只需将.delete按钮设置为按钮不提交,我认为这将解决您的问题,如果没有,请通知我,

若要删除行,请对脚本代码进行以下更改。。。第一个是你的代码

$('.deleteUser').on('click', function(e) {
      var inputData = $('#formDeleteUser').serialize();   
      var dataId = $(this).attr('data-id');
$.ajaxSetup({
  headers: {
'    X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
$.ajax({
    url:  '{{ url('/delete') }}' + '/' + dataId,
    method: 'POST',
    data: inputData,
      success : function(data){
                console.log(data);
            }
 }); 
});

上面的代码有一些变化

$('.deleteUser').on('click', function(e) {
      var inputData = $('#formDeleteUser').serialize();   
      var dataId = $(this).attr('data-id');
      // added code is
      $object=$(this);

$.ajaxSetup({
  headers: {
'    X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
$.ajax({
    url:  '{{ url('/delete') }}' + '/' + dataId,
    method: 'POST',
    data: inputData,
      success : function(data){
                console.log(data);
                //if success status is successful and below code removes the parent row from the table
                $($object).parents('tr').remove();
            }
 }); 
});

但当我使用Ajax时,它不应该加载,或者以前的数据应该自动消失

您必须自己控制,ajax就像是对web服务器的请求,而无需重新加载页面(或导航),但浏览器不知道在发出ajax请求后要执行什么操作。当您使用jQuery时,您可以在success回调中的Ajax请求之后更新UI。

例如,尝试返回已删除对象的id和ajax中的成功函数。

success: function(data) {
  jQuery('#'+data.id).remove();
}