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

Posted

技术标签:

【中文标题】Laravel - 如何通过 AJAX (jQuery) 调用控制器函数【英文标题】:Laravel - How to call a controller function via AJAX (jQuery) 【发布时间】:2018-07-27 07:10:22 【问题描述】:

我有许多可用的控制器功能,但是,为了可用性,我想将其中一些切换为通过 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 请求归类为 error 所以我无法正确处理。我假设我应该返回某种响应对象,但我不知道这是什么或它需要包含什么。

【问题讨论】:

【参考方案1】:

您可以简单地返回一个包含成功或失败的数组。

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

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

【讨论】:

【参考方案2】:

您可以在成功时返回一个 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】:

您需要使用json() 函数返回json response

return response()->json(true);

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

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

或失败

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

【讨论】:

【参考方案4】:

在路线中:

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

阿贾克斯:

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

【讨论】:

如果我够快,我会发的哈哈。

以上是关于Laravel - 如何通过 AJAX (jQuery) 调用控制器函数的主要内容,如果未能解决你的问题,请参考以下文章