salut à tous , je veux envoyer des données à travers ajax mais je n'arrivé pas de trouver la solution.
voila mon code que j'écrie :

$.ajax({
beforeSend: function(xhr){xhr.setRequestHeader('token', '<?= csrf_token()?>');},
url:'cours/send',
type: 'post',
date:'type='+event.title+'&startdate='+event.start+'&end='+event.end,
datetype:'json',
encode:true,
error:function(e){
sweetAlert('Oops...', 'Something went wrong ajaxxxxxxxx!', 'error');
console.log(e.responseText);
}
}).done(function(data){
console.log(data);
swal( 'Save!', 'Your Cour done.', 'success' );
});

9 réponses


thamer belfkih
Auteur
Réponse acceptée

finalement , aprés 4 jours je trouve ou est-t-il l'erreur et je le corrigé , je remplace "use Illuminate\Http\Request " par "use Request".

merci infiniment le mecs

1- c'est dataType au lieu de datetype et data au lieu de date
2- Que t'indique la console javascript de ton navigateur ?

je les changé , mais il m'affiche tjrs le méme message d'erreur : 500 (Internal Server Error)

tu n'a rien d'autre comme message dans la console ? Mets toi en debug=true dans ta config et Laravel devrait te dire pourquoi il n'est pas content.
Sinon à ta place je mettrais plutôt :

data: {type: event.title, startdate: event.start, end: event.end, _token: "<?= csrf_token()?>"}

car c'est plus claire, après c'est mon point de vue.

Pour la partie token que je t'ai ajouté, c'est tout simplement car tu n'a pas besoin de le mettre dans les headers et même si tu voulais le faire, ceci est plus parlant à rajouter à ta requête ajax :

headers: {
    'X-CSRF-TOKEN': '<?= csrf_token()?>'
}

tu notera que j'ai mis "X-CSRF-TOKEN" et non "token" qui est peut-être la raison de ton erreur ici, dans les headers on mets "X-CSRF-TOKEN" et dans les form "_token"

http://laravel.com/docs/5.1/routing#csrf-x-csrf-token pour mieux comprendre l'ajax en CSRF sur Laravel

Salut,

Il te faut déjà récupérer le token dans les métas de ta page (je ne sais plus si Laravel le génère automatiquement ou s'il faut que tu le fasse à la mano, je te laisse chercher de ton côté).
HTML:

<meta name="csrf-token" content="{{ csrf_token() }}" />

Puis tu n'as plus qu'à envoyer tes datas en POST via l'objet JS XMLHttpRequest ou la fonction jq $.ajax().
JS:

var CSRF_TOKEN = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
$.ajax({
    url: 'cours/send',
    type: 'POST',
    data: {/* tes datas */, _token: CSRF_TOKEN},
    dataType: 'JSON',
    /* .... */
});

N'oublie pas de spécifier une route en post et de vérifier dans ton controller les permissions d'accès (middleware Auth et compagnie).

Dans la fonction de ton controller, tu check si la request envoyée est de type AJAX:

if (Request::ajax()) {
    /* Ton traitement ici */
}

bonjour , il m'affiche tjrs le méme error ( 500) .

PS: la formulaire que j'utilise est affiché dans une lightbox à l'aide de sweetalert2.

Salut,

Tu as activé le débug mode ? Tu as débiguer tes variable ?
Parce que une erreur 500 signifie généralement un soucis au niveau du code PHP, est-ce que tu as vérifié tes logs d'erreurs PHP ?

voila que ce qui m'affiche le débuggueur : Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context
C:\wamp\www\laravel\app\Http\Controllers\CoursController.php#130

Ah j'allais te le dire, il faut utiliser la facade Request, sinon il fallait instancier l'objet Request puis faire $request->ajax().

Sinon pas de quoi pour l'aide ;)
N'oublie pas de passer ton sujet en résolu, merci ;)