我正在尝试将简单的POST请求数据发送到控制器,但是使用ajax。没什么好看的,我只是想在没有页面重定向/刷新的情况下将数据发送到我的控制器。
编辑:将所有代码更新为目前的代码
标题
<meta name="csrf-token" content="{{ csrf_token() }}" />
<script>var host="{{url()}}"</script>
路线
post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');
标记
<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}">
脚本
$('.getRequestReadMessage').click(function() {
$readValue = $(this).attr('data-value');
$token = $('meta[name=csrf-token]').attr("content");
$.ajax({
type: "POST",
url: host + '/messages/unread',
data: {readValue: $readValue, _token:$token},
});
});
控制器
public function getReadRequest(Request $request)
{
dd(Input::get("readValue"));
}
答案 0 :(得分:4)
Ajax部分本身似乎很好。
确保在代码中的某处定义了host
。例如:
<head><script>var host="{{url()}}"</script>
但是,如果你在click
上听<a href
,那么最好防止事件冒泡。像这样:
$('.getRequestReadMessage').click(function(e) {
e.preventDefault();
对于Laravel Controller的方法,有很多种方法。 例如:
dd(Input::get("readValue"));
dd(Request::get("readValue"));
dd($request->input("readValue");
要么应该做到这一点
路线很可能也是关闭的,路径需要&#34;未读&#34;工作。
post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');
答案 1 :(得分:2)
由于你正在使用POST方法,你必须发送一个_token,你可能会收到一个令牌不匹配错误。
在标题上,输入:
<meta name="csrf-token" content="{{ csrf_token() }}" />
在JS上
$('.getRequestReadMessage').click(function() {
$readValue = $(this).attr('data-value');
$token = $('meta[name=csrf-token]').attr("content");
$.ajax({
type: "POST",
url: host + 'messages/unread',
data: {readValue: $readValue, _token:$token},
});
});
但是你的路线似乎有些偏差。
将其更新为:
post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');
==== EDIT =====
另外,我看到你在表单字段周围有这个div,因为你使用的是ajax,它不是必需的。
<div class="accordion messageAccordion getRequestReadMessage" data-value="{{$message->id}}">
我所做的是删除表单字段和隐藏的输入,我也删除了type = submit属性,因为它不是表单中的按钮。我算法将div中的value属性更改为数据值。将您的JS更改为:
$readValue = $(this).attr('data-value');
编辑2
$('.getRequestReadMessage').click(function() {
$readValue = $(this).attr('data-value');
$token = $('meta[name=csrf-token]').attr("content");
$.ajax({
type: "POST",
url: host + '/messages/unread',
data: {readValue: $readValue, _token:$token},
}).success(function (res){
alert('it work! :D');
});
});
答案 2 :(得分:0)
尝试调整您的路线:
Route::post('/messages/unread', '\CommendMe\Http\Controllers\MessageController@getReadRequest');