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