Kie*_*Duy 9 php ajax jquery laravel laravel-5
我正在尝试POST在Laravel 5.1应用程序中通过jquery Ajax 发送请求.我有405方法不允许,我在这个论坛上搜索其他问题,但找不到解决方案:
我的routes.php:
Route::post('backend/get_subdirectories', 'Backend\FileManagerController@get_subdirectories');
Run Code Online (Sandbox Code Playgroud)
控制器
public function get_subdirectories(Request $request)
{
dd($request);
}
Run Code Online (Sandbox Code Playgroud)
和脚本
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");
});
Run Code Online (Sandbox Code Playgroud)
我得到错误405 - 方法不允许
我错了什么?
Kir*_*chs 18
@Chris的评论是正确的:)
您只需/要从网址的末尾删除它.你的ajax请求应该去http://domain.com/backend/get_subdirectories.
原因是,因为在public/.htaccess文件中它将301将带有尾部斜杠的所有URL重定向到没有一个的相同URL.这样做的代码在这里:
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
现在真正的问题是,客户端将对301重定向指定的URL执行GET请求.
等待!它为什么会这样做?
那么,我们可以查看RFC7231的答案.它说
6.4.2.301永久移动
301(永久移动)状态代码表示已为目标
资源分配了新的永久URI,并且
此资源的任何将来引用都应使用其中一个附带的URI.
具有链接编辑功能的客户端应尽可能自动将对有效请求URI的引用重新链接到
服务器发送的一个或多个新引用.服务器应该在响应中生成一个Location头字段,其中包含新永久URI的首选URI引用.该
用户代理可以使用自动位置字段值
重定向.服务器的响应有效负载通常包含一个短
超文本注释,其中包含指向新URI的超链接.Run Code Online (Sandbox Code Playgroud)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.默认情况下,301响应可缓存; 即,除非
方法定义或显式缓存控制另有说明(参见
[RFC7234]的第4.2.2节).
现在有趣的是底部的注释指定用户代理可以将请求方法从POST更改为GET.似乎从浏览器到框架的大多数用户代理似乎遵循该规则.
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |