AJAX POST到控制器不在laravel中工作

时间:2018-01-13 14:42:06

标签: php jquery ajax laravel

我正在尝试将ID发布到我的某个控制器上,但我的工作没有用,我也不知道原因:

路线:

 Route::post('/save-book','UploadController@save_book')->name('savebk');

控制器:

public function save_book(Request $request)
    {

        dd($request->all());

    }

在视图中:

<a id="bksv" data-value="{{$uploads[0]->id}}" href="" >Save it!</a>

jquery:

$(document).ready(function() {
   $("#svd").click(function(e){
         var data = $("#bksv").data().value;
         console.log(data);

         $.ajax({
             url: 'save-book',
             data: {'id': data},
             type: 'POST',
             datatype: 'JSON',
             success: function (response) {

             },
             error: function (response) {

             }
         });

     });
  });

有人可以帮忙解决问题吗?我不知道我有什么问题。 我认为我想要实现的目标是显而易见的。 在控制器中,我有一个数据库查询,我为此问题删除了它。

问题是:当我点击<a>标签时,基本上没有任何事情发生,而value正在记录控制台。

1 个答案:

答案 0 :(得分:1)

某些解决方案:也许您有一个错误$.ajax它不是一个函数,这意味着您正在使用缩小版本的jquery,因此$.ajax将其删除在该缩小版本上。因此,请确保在脚本之上包含未压缩的jquery版本:

    <script
      src="https://code.jquery.com/jquery-3.2.1.js"
      integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
      crossorigin="anonymous">
   </script>

所以你的解决方案:注意:你有一个TYPO $("#svd").click(function(e) idbksv不是svd所以这是有效的:

<a href="#"  id="bksv" data-value="32">Save it!</a>


<script
  src="https://code.jquery.com/jquery-3.2.1.js"
  integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
  crossorigin="anonymous"></script>
<script type="text/javascript">

$(document).ready(function() {
   $("#bksv").click(function(e){
       e.preventDefault();
         var data = $("#bksv").data().value;
         console.log(data);

         $.ajax({
             url: 'save-book',
             data: {'id': data},
             type: 'POST',
             datatype: 'JSON',
             success: function (response) {

             },
             error: function (response) {

             }
         });

     });
  });
</script>

在你的控制器中试试这个

public function save_book( )
{

        dd(request()->all());

}

并确保您在ajax上的网址为/save-book

最终解决方案由于这是一个帖子请求,请确保您在请求时包含csrf令牌,否则您将无法与后端通话,因此在您的html表单中添加此字段:

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

然后在你的ajax调用数据有效负载包括如下:

$(document).ready(function() {
   $("#bksv").click(function(e){
       e.preventDefault();
         var data = $("#bksv").data().value;
         console.log(data);

         $.ajax({
             url: '/save-book',
             data: {'id': data, "_token": $('#token').val()},
             type: 'POST',


             success: function (response) {

             },
             error: function (response) {

             }
         });



     });
  });