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) 调用控制器函数的主要内容,如果未能解决你的问题,请参考以下文章

如何通过邮件方法将数据从 ajax 传输到 laravel 5.2 控制器

如何使用 vanilla javascript 通过 ajax 将多张照片上传到 Laravel 应用程序?

Laravel如何通过ajax按名称或ID搜索在前端仅显示用户帐户的附加患者

如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器

如何使用 laravel 通过 jquery ajax 将表单值插入数据库?

Laravel通过ajax登录维护会话