【问题标题】:Ajax POST Request in LarvaelLaravel 中的 Ajax POST 请求
【发布时间】:2018-01-28 11:32:49
【问题描述】:

我使用POST Ajax 请求从<script> 文件中的<script> 标记向控制器发送名为text 的值。如果我不写$.post 函数,那么它会在控制台中输出文本值。但是当我编写此 Ajax 请求以将数据发送到控制器值时不会通过。简而言之,我想将值从 View 传递给 Controller,但我无法做到这一点。我已经尝试过所有 YouTube 教程和之前的 Stack Overflow 问题。我也访问了 Laracasts,但问题没有解决。难道我做错了什么?请帮忙。谢谢。

shopReq.blade.php:

{{csrf_field()}}
<script>
    $(document).ready(function(){
        $('.ourItem').click(function(event){
                var text=$(this).text();
                $('#addItem').val(text);
                 console.log(text);
                $.post('shopReq',{'text':text,'_token':$('input[name=_token]').val()}),function(data){
                    console.log(data);
                });
        });
    });
</script>

Web.php:

Route::post('shopReq','UserController@special');

控制器:

class UserController extends Controller
{   
    public function special(Request $request){
        $articles = DB::table('shoppingtrips')->get();
        echo"DONE";
  //      return $request->all();
    }
}

【问题讨论】:

  • console.log(data); 的输出在控制台上得到了什么?也尝试将$.post('shopReq',{'text':text,'_token':$('input[name=_token]').val()}),function(data){ console.log(data); }); 替换为 $.post('shopReq',{'text':text, '_token':$('input[name=_token]').val()}, function(data){ console.log(data); }); 然后告诉我们编辑后控制台的输出

标签: jquery ajax laravel-5 post


【解决方案1】:

试试下面的ajax 语法:

$.ajax({
    url: 'your route',
    method: 'post',
    data: {
        key1: value1
        // you can send more such key value pair here
    },

    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    success: function(response){

    }
});

不要忘记添加CSRF-TOKEN,否则您将收到 500(内部服务器错误),因为它是发布请求所必需的。

【讨论】:

  • 我们将 $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': '{{csrf_token()}}' } }); 放在 layout.blade 文件中,这样我们就不必在每次调用的基础上处理令牌
  • 我用了你的方法,但它不起作用。当我在成功函数中添加console.log("Success") 时,它没有在控制台中提供任何输出。
  • 我写了url: '/shopReq',但它给了我错误:POST XHR http://localhost/shopReq [HTTP/1.1 404 Not Found 16ms]
  • @MayankPandeyz 是的。
【解决方案2】:

在您的 layout.blade.php 文件中将其添加到您的 head 标签中:

<script type="text/javascript">
    // laravel ajax helpers
    var APP_URL ={!! json_encode(url('/')) !!}; 
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': '{{csrf_token()}}'
        }
    });
</script>

那么,在你看来,这样做:

<script>
    $(document).ready(function(){
        $('.ourItem').click(function(event){
            var text=$(this).text();
            $('#addItem').val(text);
            console.log(text);


            $.ajax({
                url: APP_URL+'/shopReq',
                method: 'post',
                data: {
                    text: text
                },
                success: function(response){
                    console.log(response);
                }
            });
        });
    });
</script>

在您的控制器中,执行以下操作:

class UserController extends Controller
{   
    public function special(Request $request){
        $text = $request->input('text'); 
        // do stuff with $text 
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 2023-03-28
    • 2019-04-04
    • 2021-07-09
    • 2022-06-14
    • 2020-01-11
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多