真的很奇怪的AJAX行为(发送正确请求类型的问题)

时间:2015-09-15 13:52:07

标签: jquery ajax laravel

我们在Laravel 5框架上构建了一个Web应用程序。我们设置了许多路由(POST或GET路由),我们有许多路由被AJAX方法调用,一切似乎都工作正常,直到今天。

我们尝试创建一个新的邮政路线

Route::post('ip_filters_company', [
    'as' => 'ipFiltersCompany',
    'uses' => 'App\SettingsController@ipFiltersCompany'
]);

并尝试通过jQuery调用它:

$.ajax({
    method: "POST", // we tried also type: "POST"
    url: "ip_filters_company", // we tried also "/ip_filters_company", "ip_filters_company/", "/ip_filters_company/"
    data: 'test'
});

我们也尝试将其简化为:

$.post("ip_filters_company"); // again with different "slashed" modifications

奇怪的是,在我们收到POST时,我们对此新路线的所有尝试GET请求都是405 error (Method not allowed)个请求,我们可以在Chrome的“网络”标签中看到{ {1}}是必需的(我们尝试将其发送为POST,js已发送POST且服务器无法投放,因为它需要GET)。

我们发现了其他路线,例如

POST
使用

可以毫无问题地调用

Route::post('rename_company', [
    'as' => 'renameCompany',
    'uses' => 'App\CompaniesController@renameCompany'
]);

因此我们尝试将最后提到的(并且正在工作)路线重写为

$.post("rename_company");

并用

调用它
Route::post('rename_company2', [
    'as' => 'renameCompany2',
    'uses' => 'App\CompaniesController@renameCompany'
]);

并且因405错误而失败。 (但为什么?)

我们还试图删除laravel中定义的所有其他路由但没有帮助。 (我们还清除了laravel的路由缓存)

到目前为止总结一下,我们显然无法添加$.post("rename_company2"); 可访问的新路径(奇怪,不是吗?)

我们认为问题可能是由jQuery版本引起的,所以我们尝试了其中的3个 - 2.1.1,1.11.3和1.4.4。 (没有帮助)。

然后我们决定问题是由jQuery本身造成的,所以我们尝试了这个:

POST

让我们更加惊讶:

although post is required, post is not allowed

正如您所见,(function(){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { console.log(arguments) }; xhr.open("POST", "ip_filters_company", false); xhr.send(); })(); 是必需的并已发送 - 但不允许。

我们非常感谢这个问题的任何帮助。有人可以解释一下可能导致这些问题的原因以及如何解决这些问题吗?

1 个答案:

答案 0 :(得分:0)

为了结束这个话题,我决定自己发布答案。首先,感谢所有对此问题发表评论并帮助我们解决问题的人。

我们发现我们忘记将该路线添加到开放路线。此外,其中一位同事确实遵循:如果POST请求无法通过(没有csrf令牌,不在打开的路由中),请忽略它并通过GET重定向到同一页面。因此,如果我们发送带有csrf令牌的POST请求,它会自动更改为GET请求并被阻止405错误(方法不允许)

TLDR:快速解决方案是将该路线添加到开放路线。