display flash and error message after ajax request Laravel
Solution 1
You can't redirect the within controller if you use ajax request.
But you can do like this.
Send some parameters in the Controller like this
$Response = array(
'success' => '1',
);
or
$Response = array(
'success' => '0',
'error' => 'Your Flash Message'
);
and return it return $Response;
Then, In the ajax result you can redirect the user like this
if (data.success == 1){
window.location = 'toyourdesiredpath';
}
else
{
//show your error message in your div or span
}
Solution 2
Just set a session flash message and a redirect url in Laravel controller (or return null if you want to reload the current page) like this:
if ($redirect) {
session()->flash('success', 'Your Flash Message for redirect');
return '/redirect-url';
} else {
session()->flash('success', 'Your Flash Message for reload');
return null;
}
And then make the redirect or reload inside the JavaScript code:
$.post(`/ajax-url`, $(e.target).serialize()
).done((redirect) => {
if (redirect) {
window.location.href = redirect
} else {
window.location.reload()
}
}).fail((errors) => {
this.setState({
errors: errors.responseJSON.errors
})
})
Juan Carlo F. Yarra
Updated on June 15, 2022Comments
-
Juan Carlo F. Yarra almost 2 years
After a successful ajax request, I want to send a flash message to my view (For example, upon editing, I'd like to redirect the user to the homepage with $flash = "Your shop has been update" ). Within the controller, it is easy but I don't know what to do within JavaScript. Do any of you know how to figure it out? Im using Laravel
Controller
public function postUpdate (Request $request) { $this->validate($request, [ 'website_name' => 'required', 'website_url' => 'required', 'category' => 'required', 'type' => 'required', 'sells' => 'required', 'location' => 'required', 'description' => 'required', 'payment' => 'required' ]); Shop::where('username', '=', Auth::user()->username)->update(['website_name' => Input::get('website_name'), 'website_url' => Input::get('website_url'), 'type' => Input::get('type'), 'category' => Input::get('category'), 'sells' => Input::get('sells'), 'location' => Input::get('location'), 'payment' => Input::get('payment'), 'description' => Input::get('description')]); return Response::json(['message' => 'Success', 'message_class' => 'alert alert-success fade in']); }
AJAX
$(".update-form").submit(function(s){ s.preventDefault(); var website_name = $('input[name=website_name]').val(); var website_url = $('input[name=website_url]').val(); var type = $('#type option:selected').val(); var category = $('#category option:selected').val(); var sells = $('input[name=sells]').val(); var location = $('input[name=location]').val(); var payment = $('input[name=payment]').val(); var description = $("textarea#message").val(); $.ajax({ type: "POST", url: "advertiser/update", data: { _token: token, website_name: website_name, website_url: website_url, type: type, category: category, sells: sells, location: location, payment: payment, description: description }, success: function() { $('.modal-backdrop').remove(); $('body').load('advertiser') }, error: function(data) { $('body').load('advertiser') } }) });
HTML
<div class="row" id="errors"> @if (Session::has('message')) <div class="{!! Session::get('message_class') !!}"> <a href="#" class="close" data-dismiss="alert">×</a> <strong>Note!</strong> {!! Session::get('message') !!} </div> @endif @if($errors->has()) <div class="alert alert-danger fade in"> <a href="#" class="close" data-dismiss="alert">×</a> <p>the following errors have occured:</p> <ul> @foreach($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> @endif
-
Juan Carlo F. Yarra over 8 yearsreturn Redirect::to('advertiser')->with(['message' => 'Success', 'message_class' => 'alert alert-success fade in']); not working if I remove ajax its working...
-
Harsh Sanghani over 8 yearsdo one thing return some status as json and then in success of ajax you can display that success message
-
Juan Carlo F. Yarra over 8 yearsreturn Response::json or return json_encode I dont know how to get it using javascript can u give me an example please thank you :)
-
Harsh Sanghani over 8 yearsHere you can find more relevant answer for you :- stackoverflow.com/questions/15624075/…
-
Keith almost 7 yearsThis won't display the message though, you will still need to set the session.
-
Pablo Papalardo over 3 yearsWorks to me. Thanks
-
parth over 2 yearsDid not work for me. I am using laravel 8.*.