Laravel 控制器 $request 未收到 AJAX 请求
Laravel Controller $request not receiving AJAX request
我无法理解我做错了什么。
我的route.php
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
Route::post('/changeUserPermissions', 'UserController@changeUserPermissions')->name('postPermissions');
Route::get('/changeUserData', 'UserController@changeUserData');
还有我的Controllers.php
public function getchangeUserPermissionsView(Request $request)
{ dd($request->ajax()); //returns false
// or dd($request->all()); -> returns []
}
public function changeUserData(Request $request)
{
if($request->ajax()){
$usernames = Input::get('usernameSend');
if(isset($usernames)){
$user = User::Where('username', '=', $usernames)->first();
return redirect()->to('/settings');
}else{
Log::warning("Username não existe na base de dados.");
}
}
}
public function changeUserPermissions(Request $request) //Route::post
{
return view('notUsedAtm');
}
和我的jQuery
$(document).ready(function(){
$('body').on('click', '.dropdown-toggle', function(){
if((this.id).indexOf("dados") != -1){
var content = this.id.replace("dados_", "");
$.get('changeUserData', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('settings');
}).fail(function(err, status) {
alert("There was an error. Try again please!");
});
}else if((this.id).indexOf("permissoes") != -1){
var content = this.id.replace("permissoes_", "");
$.get('changeUserPermissions', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('changeUserPermissions');
}).fail(function(err, status) {
alert("There was an error. Try again please!");
});
}
});
});
我的视图调用完全相同,除了 id 名称。我的意思是我的按钮都被平等声明,它们的 id 彼此不同。
现在 changeUserData 和 changeUserState 一样有效(在我的 jQuery 脚本中调用)。两者都收到请求并将其作为 AJAX,但 changeUserPermission 没有。
正如 post 在代码中评论的那样,如果我添加请求并询问它是否是 AJAX 请求 returns false 如果我请求->all() 它只是 returns 一个空数组。
知道它可能是什么吗?已经搜索了一段时间,找不到任何东西。
编辑:删除了一些代码以使其更短且更易读。
编辑 2:在路由方面一切正常。例如 $.get('changeUserPermissions'...) 正在调用正确的路线,我在路线上所做的一切都很好。唯一的问题是它无法识别 ajax 请求。还有 dd($request->isMethod('get')) returns true.
这是 dd($request) 的打印。如果您需要扩展的东西,请说出来,我会 post.
您确定 $.get
中的网址正确吗?
它们应该是 /changeUserData
和 /changeUserPermissions
吗? (注意前导 /
)。
此外,changeUserPermissions
是否应该是 POST
,因为这就是它在您的路线中的定义方式?
最后,您通过 GET
发送 BODY
不会给您预期的结果。
根据您提供的信息,这应该有效:
route.php
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
Route::post('/changeUserPermissions', 'UserController@changeUserPermissions')->name('postPermissions');
Route::post('/changeUserData', 'UserController@changeUserData'); // This should be `POST`, `PUT`, or `PATCH`
jQuery
$.post('/changeUserData', { usernameSend: content, '_token': $('meta[name=csrf-token]').attr('content') })
.done(function (data) {
...
}).fail(function (xhr, status, error) {
...
})
$.post('/changeUserPermissions', { usernameSend: content, '_token': $('meta[name=csrf-token]').attr('content') })
.done(function (data) {
...
}).fail(function (xhr, status, error) {
...
})
见jQuery.post() for more info and ways to post data via jQuery. If you want to use put
or patch
, I believe you'll need jQuery.ajax()。
在向 /changeUserPermissions
发送 AJAX get
请求时跟踪您的代码流
第 1 步:
get
请求已发送至 /changeUserPermissions
这是路线:
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
第 2 步:
此函数被触发。
public function getchangeUserPermissionsView(Request $request)
{ dd($request->ajax()); //returns false
// or dd($request->all()); -> returns []
}
注意:这仍然是一个成功的 AJAX 响应,所以,继续...
第 3 步:
由于AJAX请求成功,下面的代码会运行:
window.location.replace('changeUserPermissions');
WHICH 向 /changeUserPermissions
执行 get
请求,从而再次触发 STEP 2 中的函数,但是现在,不包含任何数据。
这就是我在您的代码中看到的情况。
我认为您看到的 empty/false 是 最新的 get
请求 /changeUserPermissions
发生在 STEP 3(这就是 $request->ajax()
返回 false
的原因)
补充:
您可以在浏览器的开发工具中看到 STEP 2 的实际 dd($request->ajax())
,因为它是一个 AJAX 请求,您可以在Network标签,随便找request,大概会命名为/changeUserPermissions
我无法理解我做错了什么。
我的route.php
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
Route::post('/changeUserPermissions', 'UserController@changeUserPermissions')->name('postPermissions');
Route::get('/changeUserData', 'UserController@changeUserData');
还有我的Controllers.php
public function getchangeUserPermissionsView(Request $request)
{ dd($request->ajax()); //returns false
// or dd($request->all()); -> returns []
}
public function changeUserData(Request $request)
{
if($request->ajax()){
$usernames = Input::get('usernameSend');
if(isset($usernames)){
$user = User::Where('username', '=', $usernames)->first();
return redirect()->to('/settings');
}else{
Log::warning("Username não existe na base de dados.");
}
}
}
public function changeUserPermissions(Request $request) //Route::post
{
return view('notUsedAtm');
}
和我的jQuery
$(document).ready(function(){
$('body').on('click', '.dropdown-toggle', function(){
if((this.id).indexOf("dados") != -1){
var content = this.id.replace("dados_", "");
$.get('changeUserData', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('settings');
}).fail(function(err, status) {
alert("There was an error. Try again please!");
});
}else if((this.id).indexOf("permissoes") != -1){
var content = this.id.replace("permissoes_", "");
$.get('changeUserPermissions', {usernameSend:content, '_token': $('meta[name=csrf-token]').attr('content'),}, function(data){
window.location.replace('changeUserPermissions');
}).fail(function(err, status) {
alert("There was an error. Try again please!");
});
}
});
});
我的视图调用完全相同,除了 id 名称。我的意思是我的按钮都被平等声明,它们的 id 彼此不同。
现在 changeUserData 和 changeUserState 一样有效(在我的 jQuery 脚本中调用)。两者都收到请求并将其作为 AJAX,但 changeUserPermission 没有。
正如 post 在代码中评论的那样,如果我添加请求并询问它是否是 AJAX 请求 returns false 如果我请求->all() 它只是 returns 一个空数组。
知道它可能是什么吗?已经搜索了一段时间,找不到任何东西。
编辑:删除了一些代码以使其更短且更易读。
编辑 2:在路由方面一切正常。例如 $.get('changeUserPermissions'...) 正在调用正确的路线,我在路线上所做的一切都很好。唯一的问题是它无法识别 ajax 请求。还有 dd($request->isMethod('get')) returns true.
这是 dd($request) 的打印。如果您需要扩展的东西,请说出来,我会 post.
您确定 $.get
中的网址正确吗?
它们应该是 /changeUserData
和 /changeUserPermissions
吗? (注意前导 /
)。
此外,changeUserPermissions
是否应该是 POST
,因为这就是它在您的路线中的定义方式?
最后,您通过 GET
发送 BODY
不会给您预期的结果。
根据您提供的信息,这应该有效:
route.php
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
Route::post('/changeUserPermissions', 'UserController@changeUserPermissions')->name('postPermissions');
Route::post('/changeUserData', 'UserController@changeUserData'); // This should be `POST`, `PUT`, or `PATCH`
jQuery
$.post('/changeUserData', { usernameSend: content, '_token': $('meta[name=csrf-token]').attr('content') })
.done(function (data) {
...
}).fail(function (xhr, status, error) {
...
})
$.post('/changeUserPermissions', { usernameSend: content, '_token': $('meta[name=csrf-token]').attr('content') })
.done(function (data) {
...
}).fail(function (xhr, status, error) {
...
})
见jQuery.post() for more info and ways to post data via jQuery. If you want to use put
or patch
, I believe you'll need jQuery.ajax()。
在向 /changeUserPermissions
get
请求时跟踪您的代码流
第 1 步:
get
请求已发送至 /changeUserPermissions
这是路线:
Route::get('/changeUserPermissions', 'UserController@getchangeUserPermissionsView');
第 2 步:
此函数被触发。
public function getchangeUserPermissionsView(Request $request)
{ dd($request->ajax()); //returns false
// or dd($request->all()); -> returns []
}
注意:这仍然是一个成功的 AJAX 响应,所以,继续...
第 3 步:
由于AJAX请求成功,下面的代码会运行:
window.location.replace('changeUserPermissions');
WHICH 向 /changeUserPermissions
执行 get
请求,从而再次触发 STEP 2 中的函数,但是现在,不包含任何数据。
这就是我在您的代码中看到的情况。
我认为您看到的 empty/false 是 最新的 get
请求 /changeUserPermissions
发生在 STEP 3(这就是 $request->ajax()
返回 false
的原因)
补充:
您可以在浏览器的开发工具中看到 STEP 2 的实际 dd($request->ajax())
,因为它是一个 AJAX 请求,您可以在Network标签,随便找request,大概会命名为/changeUserPermissions