Comment envoyer un message d'erreur / de réussite via ajax sans cliquer sur le bouton Soumettre dans le formulaire (s'il n'y a pas de formulaire)?
Je fais un projet laravel là-dedans J'ai utilisé la méthode lorsque l'utilisateur soumet le formulaire le formulaire va au contrôleur (via l'attribut action du formulaire) et à l'intérieur de la fonction du contrôleur, il peut renvoyer la vue avec les données et rediriger la page afin que le message d'erreur / de réussite soit affiché et la page sera rafraîchie.
@if(count($errors)>0) @foreach($errors->all() as $error) <div class="alert alert-danger"> {{$error}} </div> @endforeach @endif @if(session('success')) <div class="alert alert-success"> {{session('success')}} </div> @endif @if(session('error')) <div class="alert alert-danger"> {{session('error')}} </div> @endif
Mais le cas est que je veux cliquer sur un bouton et la même chose se produit s'il n'y a pas de formulaire. J'ai ajouté onclick to button et exécuter une fonction js pour appeler le contrôleur via ajax. Mais après l'appel au contrôleur, le code ci-dessus ne fonctionne pas comme avant. Aucune erreur non plus.
<button type="button" onclick="submit()" class="btn btn-primary" >Submit</button> <script> //when click submit button function submit(){ var _token = $('input[name="_token"]').val(); $.ajax({ url: "{{ route('RecipeController.submit') }}", type: "POST", data: { _token:_token } }) } </script>
Quelqu'un peut-il me donner une solution?
Ci-dessous, j'ai ajouté un code de message si vous le souhaitez.
return redirect()->back()->with('success', 'Successfully Added!');
3 Réponses :
Ajax attend normalement JSON, donc une redirection ou une vue normale ne fonctionnera pas.
Je peux vous montrer un exemple:
return response()->json(['error' => 'there was an error...'], 200);
Le 1er paramètre est un tableau avec les données. Le second est le statut http.
J'espère que cela vous aidera à résoudre votre problème. :)
Edit: Maintenant que j'ai votre code de message.
Il vous suffit d'ajouter un div dynamiquement avec js sur ajax success.
Rien ne s'est passé. Dois-je mettre quelque chose dans ajax success {}?
Eh bien, vous devez coder manuellement le succès oui. J'ai généralement un peu de js partagé dans toutes les vues où je gère la réponse ajax. Dans la réponse, j'envoie juste le type de message (succès, erreur, avertissement ...), le titre et le texte. Exemple: return response () -> json (['title' => 'Modifications enregistrées', 'text' => 'tout s'est bien passé :)', 'type' => 'success'], 200);
Je ne comprends tout simplement pas ce que vous avez dit: "Il suffit d'ajouter dynamiquement un div avec js en cas de succès ajax." Pouvez-vous l'expliquer s'il vous plaît?
Oui, avec javascript, vous envoyez une requête ajax. Quand c'est fini, vous avez une réponse, cette réponse contient les données dont vous avez besoin pour le message. Ensuite, j'ai vu que vos messages n'étaient que des balises
$ ('body'). Append (' RESPONSE MESSAGE ');
ah je l'ai. Merci
Si vous pensez que la mienne était la bonne réponse, vous pourriez me lever le pouce et marquer ma réponse comme valide! Merci!
Route::get('/user/{id}/removefromcart','YOURCONTROLLERNAME@MethodName');
public function removeFromCart(Request $request, $report_id) { $return = array(); $check = DB::delete("DELETE FROM carts WHERE user_id='" . Auth::user()->user_id . "' AND report_id='" . $report_id . "'"); if ($check) { $count = Cart::where('user_id', Auth::user()->user_id)->count('id'); $return = array('success' => true, 'message' => 'Item removed to cart', 'data' => $count); return response()->json($return); } } }