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 的成功块中返回控制。
您可以检查response
是true
还是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 控制器