【问题标题】:How to use ajax in laravel 5.3如何在 laravel 5.3 中使用 ajax
【发布时间】:2017-06-28 12:07:19
【问题描述】:

我是 Laravel 新手,正在使用 Laravel 5.3。我想创建一个文本字段,它会自动建议一些数据,当我选择一个数据时,它将把它添加到一个数组中。我想将该数组发送到控制器以供进一步使用。为此,

查看文件如下:

<head>
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <script>
        $(document).ready(function() {
            var members = {!!  json_encode($member)  !!};
            console.log(members);
            var arr = [];
            $("#tags").autocomplete({
                source: members,
                select: function (event, ui) {
                    arr.push(ui);
                    console.log(arr);
                }
            });
            $("#submit").click(function(event){
                $.ajax({
                    type: "POST",
                    url: '/storeresearch',
                    data: {selectedMembers: arr},
                    success: function( msg ) {
                        console.log(msg);
                    }
                });
            });
        });
        </script>
</head>
<body>
<form id="hu" action="/storeresearch" method="POST">
    {!! csrf_field() !!}
    <label>Research Author</label>
    <input type="text" id="tags" name="researchsupervisor_1" value="">
    <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Add">
</form>
</body>

我的Controller文件如下:

public function store(Request $request){
        if($request->ajax())
        {
            $mem = $request->all();
            return response()->json($mem,200) ;
        }
        else{
            return "not found";
        } 

而web.php如下:

Route::post('/storeresearch','ResearchController@store');

但似乎没有发生 ajax 调用。在控制器中,它总是进入 else 部分。任何人都可以帮助解决什么问题?

【问题讨论】:

  • &lt;input type="submit"&gt;改成&lt;input type="button"&gt;然后试试
  • 是的,它会触发 ajax 调用,但不会发生该操作。它仍然在同一页面中
  • 这就是 ajax 的含义。处理ajax时页面不会刷新
  • 噢,感谢您让这个概念变得清晰。但是当我按下 ajax 调用按钮并转到返回某些东西的控制器时,我都想要。你能帮我看看该怎么做吗?
  • 您到底要做什么?清除它。

标签: javascript php ajax laravel-5


【解决方案1】:

您的代码大多看起来不错。但是您在使用 POST 请求时缺少通过 AJAX 调用发送 csrf 令牌。

您可以通过这种方式通过 AJAX 调用发送 csrf 令牌:

<meta name="csrf-token" content="{{ csrf_token() }}">

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

更多信息:https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token

当您点击按钮时,它真的会触发 AJAX 调用吗?请在浏览器的网络选项卡上检查。

【讨论】:

  • 我也试过了,但没有改变。当我按下按钮时,它不会触发任何 ajax call()。 :(
【解决方案2】:

我通过以下操作解决了这个问题

$.ajax({
                type:'POST',
                url:'your url',
                data:{_token: "{{ csrf_token() }}"
                },
                success: function( msg ) {
                }
            });

【讨论】:

    【解决方案3】:

    尝试这样的事情:

    $.ajax({
        url     : '/login',
        method  : 'post',
        data    : {
            login_username  : userName,
            password        : password
        },
        headers:
        {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success : function(response){
    
        }
    });
    

    路线:

    Route::post('/login',[
        'uses' => 'AdminServiceController@login'
    ]);
    

    控制器方法:

     public function login()
    {
        $userName   = INPUT::get('login_username');
        $password   = INPUT::get('password');
    
        // your logic
    }
    

    【讨论】:

      【解决方案4】:

      你的 Request 命名空间声明是什么?

      如果是use Illuminate\Http\Request; 试试use Request;

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 2017-03-18
        • 2017-02-19
        • 2017-06-04
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        相关资源
        最近更新 更多