我在理解我做错的事情时遇到了问题。
我的 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不会。
正如在评论中发布的那样,如果我查询请求并询问它是否是一个AJAX请求,如果我发出请求则返回false-> all()它只返回一个空数组。
任何想法可能是什么?一直在寻找一段时间,无法找到任何东西。
编辑:取出一些代码,以使其更短,更易读。
编辑2:一切都在路线上运行良好。例如, $。get(' changeUserPermissions' ...)正在调用正确的路线,我在路线上所做的一切工作都很好。唯一的问题是它没有识别ajax请求。此外 dd($ request-> isMethod(' get'))返回true。
以下是 dd($ request)的打印件。如果您需要扩展的内容,请发布。
答案 0 :(得分:3)
您确定$.get
中的网址是否正确?
它们应该是/changeUserData
还是/changeUserPermissions
? (注意领先的/
)。
此外,changeUserPermissions
应该是POST
,因为它是如何在您的路线中定义的?
最后,您通过BODY
发送GET
将无法获得您期望的结果。
根据您提供的信息,这应该有效:
<强> 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发布数据的更多信息和方法,请参阅jQuery.post()。如果您想使用put
或patch
,我相信您需要jQuery.ajax()。
答案 1 :(得分:1)
在向get
/changeUserPermissions
请求时跟踪代码流
第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 对get
执行/changeUserPermissions
请求,从而再次触发 STEP 2 中的功能,但现在没有包含任何数据。< / p>
这就是我在您的代码中发生的事情。
我认为您在第3步中发生的最新 get
/changeUserPermissions
$request->ajax()
请求(这就是false
返回dd($request->ajax())
)
其他强>
您可以在浏览器的开发工具中看到 STEP 2 的实际/changeUserPermissions
,因为它是一个AJAX请求,您可以在网络<中看到它/ em>标签,只需找到请求,它可能会被命名为<?php $i = ($telephone->currentpage()-1)* $telephone-
>perpage() + 1;?>
@foreach($telephone as $whatever)
<td> {{ $i++ }}</td>
@endforeach