Laravel - 如何通过 AJAX 调用控制器函数 (jQuery)

Laravel - How to call a controller function via AJAX (jQuery)

我有许多可用的控制器功能,但是,为了可用性,我想将其中一些功能切换为通过 AJAX 调用。

这是我的 jQuery 代码:

$.ajax({
        method: 'GET',
        url: $(this).data('url'),
        data: {},
        success: function( response ){
            console.log( response );
        },
        error: function( e ) {
            console.log(e);
        }
    });

这是我的控制器函数:

public function add( $user_id, $project_id )
{

    $project = Project::findOrFail( $project_id );

    if( empty( $project ) ) {

        return view( 'home' )->with('message', 'Sorry, user not found');

    }

    if ( $project->user_id != $user_id ) {

        $scrapbook = Scrapbook::firstOrNew(['user_id' => $user_id]);

        $scrapbook->save();

        $scrapbook->projects()->attach($project_id);

        return true;

    } else {

        return false;

    }
}

就目前而言,控制器功能实际上做了它应该做的事情(将项目添加到剪贴簿)。但是 returns 导致 AJAX 请求 class 作为 error 所以我无法正确处理这个问题。我假设我应该 return 某种响应对象,但我不知道这是什么或它需要包含什么。

您需要return一个json response 使用json()函数

return response()->json(true);

或者如果想发回额外的数据

return response()->json([
   'message' => 'successfull',
   'items' =>$insertedItems
],200);

或失败

return response()->json(['error'=>'error text'],$statusCode)

在路线中:

Route::get('/url', 'controller_name@controller_function');

Ajax:

$.ajax({
    method: 'GET',
    url: 'url',
    data: {},
    success: function( response ){
        console.log( response );
    },
    error: function( e ) {
        console.log(e);
    }
});

作为响应,发送 json:

return response()->json(['message' => 'successfull'],200);

您可以 return 一个 json 成功响应:

public function add( $user_id, $project_id )
{
    // Other code ...

    $isSuccess = false;

    if ($project->user_id != $user_id) {

        $scrapbook = Scrapbook::firstOrNew(['user_id' => $user_id]);

        if ($isSuccess = $scrapbook->save()) {
            // only attach it if successfully saved
            $scrapbook->projects()->attach($project_id);
        }

    }

    return response()->json([
        'success' => $isSuccess
    ]);
}

因此,在您的 ajax 回复中,您可以检查:

success: function( response ){
    console.log( response.success ); // true or false
}

您可以简单地 return 包含成功或失败的数组。

$output_data = ['response' => true, 'message' => 'request is successful.' ];
$output_data = ['response' => false, 'message' => 'error message for user.' ];
return $output_data;

这将 return 控制在 ajax 的成功块中。 您可以检查 responsetrue 还是 false 并相应地执行代码。