【问题标题】:AJAX POST Request not calling Controller method in post routeAJAX POST 请求未在 post 路由中调用 Controller 方法
【发布时间】:2018-04-02 03:23:07
【问题描述】:

尝试发出 AJAX POST 请求时,我的代码给了我 500 内部服务器错误。我已经完成了 CSRF Token 部分。

这是我的 JS 代码

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$('#likeBtn').on('click', function(e){

    e.preventDefault();

    //Getting urlLink and activityId - works

    $.ajax({
        type: 'POST',
        url: './mainView/postlike',
        data: {activityId : activityId},
        success: function(data){
            console.log(JSON.stringify(data));
        },
        error: function(e){
            console.log(JSON.stringify("Exception: " + e));
        }
    });
});

这是我的帖子路线:

Route::post('/mainView/postlike', 'ActivityController@postLike')->name('postLike')->middleware('auth');

这是我的控制器方法:

public function postLike(){
    if(Request::ajax()){
        return Response::json(Request::all());
    }
}

这是我的 mainView.blade.php。我真的不想使用表单,但我还是尝试了。

<form id="likeForm" method="POST" action="#">
    <input class="likeToken" type="hidden" name="_token" value="{{ csrf_token() }}">
    <a id="likeBtn" data="{{ route('activity.like', ['activityId' => $activity->activity_id]) }}">
    <img src="IMG/icons/like.png" alt="likes">
    </a>{{ $activity->likes->count() }}
</form>

话虽如此,如果我在路由中执行此操作,它会输出提供的消息。

Route::post('/mainView/postlike', function(){
    if(Request::ajax()){
        echo "Hi";
    }
})->name('postLike')->middleware('auth');

按赞按钮时显示“嗨”

【问题讨论】:

  • 服务器端脚本错误。尝试在您的服务器上启用错误反馈。
  • 检查storage/logs/laravel.log 是否有错误。
  • 它说,local.ERROR:非静态方法 Illuminate\Http\Request::ajax() 不应静态调用 {"userId":1,"email":"test@gmail. com","exception":"[object] (ErrorException(code: 0): 非静态方法 Illuminate\\Http\\Request::ajax() 不应在 静态调用

标签: javascript php ajax laravel


【解决方案1】:

在 cmets 中,您已发布错误消息。要修复它,请更改:

if(Request::ajax()){

到这里:

if (request()->ajax()) {

对于第二个错误:

response()->json(request()->all());

另外,你可以注入Request类:

public function postLike(Request $request)

并使用$request 而不是request()

【讨论】:

  • @ShahlinIbrahim 这意味着它有效。您已经修复了一个错误,而这个错误是完全不同的错误。
  • 实际上,是的,它有效,我也必须替换其他 Request 用途。谢谢!
  • 很高兴它有帮助。
  • @ShahlinIbrahim 当你使用JS发送数据时,你可以不用表单。
  • @ShahlinIbrahim request('activity_id') 或 request()-&gt;activity_id 或 $request-&gt;activity_id 如果您注入 Request 类对象。
猜你喜欢
  • 2017-10-21
  • 2022-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2019-09-05
  • 1970-01-01
  • 2023-03-25
  • 2022-06-14
相关资源
最近更新 更多