我正在研究Laravel,并尝试使用AJAX将变量发送到控制器,但请求已更改为GET!
AJAX
function fetchTasks(email) {
$.ajax({
method: 'POST',
dataType: 'json',
url: '/teamwork',
data: {_method: 'POST', email : email},
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
}
Routes.php
Route::any('/teamwork', 'TeamworkController@teamwork')->name('testPRoute');
当我将路线方法更改为发布时,它显示405(不允许使用方法)
当我在控制器中dd($ request)时,这就是我得到的 image
那么,为什么我的Ajax请求不起作用?
已编辑: 我已将代码修改为以下
function fetchTasks(email) {
console.log(email);
var token = "{{ csrf_token() }}";
$.ajax({
method: "POST",
url: "teamwork",
data: {
_token:token,
'email': email
},
contentType: "application/json",
success: function(data) {
console.log(data);
},
error: function(err) {
console.log(err);
},
complete: function () {
window.location.href = '{{route("testTRoute")}}';
}
});
}
它仍在发送一个空的GET请求。控制台的输出如下:
{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
答案 0 :(得分:0)
基于ajax documentation,您应该使用 type 参数代替方法。
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
答案 1 :(得分:0)
您尝试过吗?
$.ajax({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
url:'teamwork' ,
type:'post',
data: { email : email},
method: 'POST',
dataType: 'json',
success:function(result){console.log(result);}
});
路线
Route::match(array('GET','POST'),'/teamwork', 'TeamworkController@teamwork')->name('testPRoute');
答案 2 :(得分:0)
如果您要发送“电子邮件”作为路由参数,但又不想在浏览器的地址栏中显示它,则可以按以下方式进行操作。
通过表单发送数据
在您的blade.php上
<form action="{{route('testPRoute')}}" method="POST">
@csrf
<!--
Set your email name or variable in input's value attribute. Like
<input type="text" name="email" value="email">
or
<input type="text" name="email" value="{{$email}}">
or -->
<input type="hidden" name="email" value="email">
<button type="submit">Go to Route</button>
</form>
在您的Web.php
Route::post('/teamwork', 'TeamworkController@teamwork')->name('testPRoute');
在您的控制器上
public function teamwork(Request $request)
{
$email = $request->email;
return $email;
}
答案 3 :(得分:0)
经过长时间的调试,我发现我的问题出在路由上。我有两条相同名称的路由,即GET和POST。这就是为什么它总是发送GET请求。