Estoy tratando de enviar una solicitud POST a través de jquery Ajax en la aplicación Laravel 5.1. Tengo el método 405 no permitido, estoy buscando otras preguntas en este foro pero no encuentro la solución:
Mis routes.php :
Route::post('backend/get_subdirectories', 'Backend\FileManagerController@get_subdirectories');El controlador
public function get_subdirectories(Request $request) { dd($request); }y guion
var _token = $('meta[name="csrf-token"]').attr('content'); console.log(_token); //It work, I can get my token from meta tag $.post( 'http://domain.com/backend/get_subdirectories/', { _token: _token}, function () { alert("success"); }) .fail(function () { alert("error"); }) .always(function () { alert("finished"); });Y obtuve el error 405 - Método no permitido
¿Qué estoy equivocado?
El comentario de @Chris es correcto :)
Simplemente necesita eliminar el / del final de su URL. Su solicitud ajax debe ir a http://domain.com/backend/get_subdirectories .
La razón es que, dentro del archivo public/.htaccess , redirigirá 301 todas las direcciones URL con una barra inclinada final a la misma dirección URL sin una. El código que lo hace está aquí:
# Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301]Ahora el problema real es que el cliente realizará una solicitud GET a la URL especificada por la redirección 301.
¡Esperar! ¿Por qué haría esto?
Bueno, podemos buscar la respuesta en RFC7231 . Dice
6.4.2. 301 Movido Permanentemente
El código de estado 301 (Movido permanentemente) indica que el objetivo
al recurso se le ha asignado un nuevo URI permanente y cualquier futuro
las referencias a este recurso deben usar uno de los URI adjuntos.
Los clientes con capacidades de edición de enlaces deben volver a vincular automáticamente las referencias al URI de solicitud efectivo a uno o más de los nuevos
referencias enviadas por el servidor, cuando sea posible.El servidor DEBE generar un campo de encabezado de ubicación en la respuesta que contenga una referencia de URI preferida para el nuevo URI permanente. Él
el agente de usuario PUEDE usar el valor del campo Ubicación para
redirección La carga útil de respuesta del servidor generalmente contiene un breve
nota de hipertexto con un hipervínculo a los nuevos URI.Note: For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 307 (Temporary Redirect) status code can be used instead.Una respuesta 301 se puede almacenar en caché de forma predeterminada; es decir, a menos que de otra manera
indicado por la definición del método o controles de caché explícitos (ver
Sección 4.2.2 de [RFC7234]).
Ahora, lo interesante es la nota en la parte inferior que especifica que el agente de usuario PUEDE cambiar el método de solicitud de POST a GET. Y parece que la mayoría de los agentes de usuario, desde navegadores hasta marcos, parecen seguir esa regla.