Hola familia StackOverflow. Esta es mi primera pregunta y espero obtener ayuda.
Soy nuevo en el marco de laravel y estoy usando la versión 5.2 en mi proyecto. Estoy tratando de pasar datos usando el método de publicación de mi función ajax a un método de controlador en particular, pero no se pasan datos al controlador.
Seguí los pasos en este foro https://laracasts.com/discuss/channels/laravel/process-data-in-controller-using-ajax-in-laravel pero no puedo hacerlo funcionar. Esto es lo que he hecho hasta ahora.
Mi JavaScript ( post_script.js ):
$.ajax({ method: 'POST', url: './home', data: { userID: 76, userName: 'Jimmy' }, }); Tenga en cuenta que este archivo se guarda en el directorio assets/js en la estructura laravel. Esto es lo que tengo en mi archivo de ruta ( routes.php ):
Route::get('/', "MyController@home"); Route::get('home', "MyController@home"); Aquí está la función que tengo en el archivo MyController.php :
function home(Request $request) { $userID = $request['userID']; $userName = $request['userName']; return view('home', [ 'userID'=> $userID, 'userName' => $userName ]); }En mi opinión, traté de acceder a él de esta manera:
<p>User ID: {{$userID}}</p> <p>User Name: {{$username}}</p>¡No se muestra nada! Por favor, ¿qué estoy haciendo mal? Necesito tu ayuda. Perdóname si mi pregunta no es adecuada, pero espero que entiendas lo que quiero decir. Gracias
Su AJAX está publicando, pero no tiene configurada una ruta POST, solo GET. Agregue una ruta POST, así:
Route::post('home', "MyController@home");Primero verifique con su desarrollador/herramienta de red (por ejemplo, firebug) si su llamada ajax llega al controlador/funciones deseadas y si los parámetros se reenvían correctamente.
Una forma segura de especificar Url en la llamada ajax en el entorno Laravel es usar la fachada de URL de esta manera:
url: "{{ URL::to('home'); }}",Sin embargo, para hacerlo así, debe almacenar su js como un archivo myscript.blade.php (!!) e @incluirlo en su vista en consecuencia.
Para recibir sus parámetros publicados en la función del controlador, no es necesario declarar los argumentos de la función, simplemente puede usar la función Input::Get(), por ejemplo. Me gusta esto:
public function home() { $userID = Input::Get('userID'); $userName = Input::Get('userName'); return view('home', [ 'userID'=> $userID, 'userName' => $userName ]); }Si intenta realizar una solicitud POST, es posible que necesite tener X-CSRF-Token .
Agregue esto a la meta:
<meta name="csrf-token" content="{{ csrf_token() }}">Y configura tu AJAX:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });En documentos de Laravel: https://laravel.com/docs/5.2/routing#csrf-x-csrf-token