5

como puedo enviar un formulario sin que se reinicie la pagina y ejecute el metodo Save de laravel?

Estuve investigando y con ajax encontré esto:

Blade.php

  <form method="POST" id="id_form">
                                @csrf  


                                    <input type="hidden" id="id" name="id" value="{{$hoy->id}}">
                                    <input type="submit">Enviar</submit>
                                </form>

Ajax:

    <script>


$("#id_form").on("submit", function(e){
  
   e.preventDefault();

   $.ajax({
            url         : 'cancelarreserva',
            type        : 'POST',
            data        : {val:id},
            cache       : false,
            async       : false,
            dataType    : 'json',
            contentType : "application/json",
            success: function(response)
            {
               alert('datos guardados')
            },
            error : function(response)
            {
                alert('error al guardar los datos')
            }
       })
});
    </script>

Controller:

  public function  cancelarreserva (Request $request){

    $nuevoIngreso = Reservas::find($request->id);
    $nuevoIngreso->aceptado = NULL;
    $nuevoIngreso->save();
    
   

  }

Ruta:

Route::post('cancelarreserva','ReservasController@cancelarreserva')->name('cancelarreserva');

El problema que tengo es que al darle al boton enviar me da este error:

introducir la descripción de la imagen aquí

Como puedo arreglar esto?

Gracias.

1 respuesta 1

1

Intenta poniendo la ruta en tu archivo routes/api.php:

Route::post('cancelarreserva','ReservasController@cancelarreserva');

Y en tu petición Ajax cambiar la URL:

$.ajax({
    url         : 'api/cancelarreserva',
    type        : 'POST',
    data        : {val:id},
    cache       : false,
    async       : false,
    dataType    : 'json',
    contentType : "application/json",
    success: function(response)
    {
       alert('datos guardados')
    },
    error : function(response)
    {
        alert('error al guardar los datos')
    }
})

Si defines tu ruta en el archivo routes/web.php debes pasar el token CSRF en tus datos, por ejemplo:

$("#id_form").on("submit", function(e){
    e.preventDefault();
    const data = new FormData(e.target);
    data.append('val', id);
    $.ajax({
        url         : 'cancelarreserva',
        type        : 'POST',
        data        : data,
        cache       : false,
        async       : false,
        dataType    : 'json',
        contentType : "application/json",
        success: function(response)
        {
           alert('datos guardados')
        },
        error : function(response)
        {
            alert('error al guardar los datos')
        }
   })
});

Pero si vas a usar Ajax las buenas prácticas recomiendan definir tus rutas en el archivo routes/api.php, como en la primera solución.

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.