如何在 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 部分。任何人都可以帮助解决什么问题?
【问题讨论】:
把<input type="submit">
改成<input type="button">
然后试试
是的,它会触发 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的主要内容,如果未能解决你的问题,请参考以下文章