我有许多工作控制器功能,但是,为了实用性,我想将其中的一部分切换到通过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请求归类为错误,因此我无法正确处理此问题。我假设我应该返回某种响应对象,但我不知道这是什么或它需要包括什么。
答案 0 :(得分:1)
您需要使用json()
功能
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的成功块中返回控制。
您可以检查response
是true
还是false
并执行相应的代码。