Laravel - 如何通过AJAX(jQuery)调用控制器功能

时间:2018-02-16 11:21:20

标签: ajax laravel function controller response

我有许多工作控制器功能,但是,为了实用性,我想将其中的一部分切换到通过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;

    }
}

目前,控制器功能实际上做了它应该做的事情(将项目添加到剪贴簿)。但它返回的是导致AJAX请求归类为错误,因此我无法正确处理此问题。我假设我应该返回某种响应对象,但我不知道这是什么或它需要包括什么。

4 个答案:

答案 0 :(得分:1)

您需要使用json()功能

返回json response
return response()->json(true);

或者如果想要发回更多数据

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

或失败

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

答案 1 :(得分:1)

在路线中:

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);

答案 2 :(得分:1)

您可以在成功时返回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
}

答案 3 :(得分:1)

您只需返回一个包含成功或失败的数组。

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

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