1
votes

Comment envoyer un message d'erreur / de réussite via ajax sans cliquer sur le bouton d'envoi dans le formulaire (s'il n'y a pas de formulaire) laravel?

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!'); 


0 commentaires

3 Réponses :


0
votes

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.


6 commentaires

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

avec un texte à l'intérieur. Il vous suffit donc d'écrire un petit bout de code pour que lorsque vous obtenez la réponse ajax, créez un div avec les données de la réponse. Exemple JQuery: $ ('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!



0
votes
Route::get('/user/{id}/removefromcart','YOURCONTROLLERNAME@MethodName');

0 commentaires

0
votes
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);
        }

    } 


}

0 commentaires