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 的成功块中。
您可以检查 response
是 true
还是 false
并相应地执行代码。
我有许多可用的控制器功能,但是,为了可用性,我想将其中一些功能切换为通过 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 的成功块中。
您可以检查 response
是 true
还是 false
并相应地执行代码。