如何在 laravel 5.3 中使用 ajax

Posted

技术标签:

【中文标题】如何在 laravel 5.3 中使用 ajax【英文标题】:How to use ajax in laravel 5.3 【发布时间】: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 调用按钮并转到返回某些东西的控制器时,我都想要。你能帮我看看该怎么做吗? 您到底要做什么?清除它。 【参考方案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;

【讨论】:

以上是关于如何在 laravel 5.3 中使用 ajax的主要内容,如果未能解决你的问题,请参考以下文章

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常

如何在 jwt laravel 5.3 中处理令牌到期?

Laravel 5.3 密码代理自定义

Laravel 5.3 - 社交登录疑问

在 laravel 5.3 中使用带有访问器的强制转换

如何处理带有斜线的 Laravel Eloquent “WHERE”查询? (Laravel 5.3)