Bonjour famille StackOverflow. C’est ma toute première question et j’espère obtenir de l’aide.
Je suis nouveau dans laravel framework et j'utilise la version 5.2 dans mon projet. J'essaie de transmettre des données à l'aide de la méthode post de ma fonction ajax à une méthode de contrôleur particulière, mais aucune donnée n'est transmise au contrôleur.
J'ai suivi les étapes de ce forum https://laracasts.com/discuss/channels/laravel/process-data-in-controller-using-ajax-in-laravel mais n'arrive pas à le faire fonctionner. Voici ce que j'ai fait jusqu'à présent.
Mon JavaScript (post_script.js
):
$.ajax({
method: 'POST',
url: './home',
data: {
userID: 76,
userName: 'Jimmy'
},
});
Notez que ce fichier est enregistré dans le répertoire assets/js
dans la structure laravel. Voici ce que j'ai dans mon fichier de route (routes.php
):
Route::get('/', "MyController@home");
Route::get('home', "MyController@home");
Voici la fonction que j'ai dans le fichier MyController.php
:
function home(Request $request) {
$userID = $request['userID'];
$userName = $request['userName'];
return view('home', [
'userID'=> $userID,
'userName' => $userName
]);
}
À mon avis, j'ai essayé d'y accéder comme ceci:
<p>User ID: {{$userID}}</p>
<p>User Name: {{$username}}</p>
Rien n'est affiché! S'il te plaît, qu'est-ce que je fais mal? J'ai besoin de ton aide. Pardonnez-moi si ma question ne convient pas, mais j'espère que vous obtenez ce que je veux dire. Je vous remercie
Votre AJAX est un envoi postal, mais vous n'avez pas défini d'itinéraire POST, mais seulement un itinéraire GET. Ajoutez une route POST, comme suit:
Route::post('home', "MyController@home");
Commencez par vérifier auprès de votre développeur/outil réseau (par exemple, firebug) si votre appel ajax atteint le contrôleur/les fonctions souhaités et si les paramètres sont correctement transférés.
Un moyen sûr de spécifier l'URL dans l'appel ajax dans l'environnement Laravel consiste à utiliser la façade d'URL comme ceci:
url: "{{ URL::to('home'); }}",
Afin de le faire comme ceci, vous devez toutefois stocker votre fichier js sous la forme d'un fichier myscript.blade.php (!!) et l'inclure dans votre vue en conséquence.
Pour recevoir vos paramètres publiés dans la fonction contrôleur, il n’est pas nécessaire de déclarer les arguments de la fonction, vous pouvez simplement utiliser la fonction Input :: Get (), par exemple. comme ça:
public function home()
{
$userID = Input::Get('userID');
$userName = Input::Get('userName');
return view('home', [ 'userID'=> $userID, 'userName' => $userName ]);
}
Si vous essayez de faire la demande POST, vous devrez peut-être avoir X-CSRF-Token
.
Ajoutez ceci à la méta:
<meta name="csrf-token" content="{{ csrf_token() }}">
Et configurez votre AJAX:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Dans Laravel docs: https://laravel.com/docs/5.2/routing#csrf-x-csrf-token
vous pouvez utiliser le nom de la route pour transmettre vos données au contrôleur
$.ajaxSetup({
headers:{'X-CSRF-TOKEN': $("meta[name='csrf-token']").attr('content')}
});
$.ajax({
type:'POST',
url: '{{route("route_name_with_post_method")}}',
data:{
'id': data
},
success:function(r){
},error:function(r) {
}
});
Vous devez d’abord configurer dataType pour la requête ajax comme ceci (si vous utilisez jQuery)
$.ajax({
method: 'POST',
url: './home',
dataType: 'json'
data: {
userID: 76,
userName: 'Jimmy'
},
})
puis essayez d'utiliser dans votre contrôleur comme suit
Request::json()
et voir le résultat
Aussi, vous pouvez utiliser Input :: get ():
Request::get('userID')