jQuery Ajax POST请求作为GET与Laravel一起发送

jQuery Ajax POST请求作为GET与Laravel一起发送,jquery,ajax,apache,laravel,Jquery,Ajax,Apache,Laravel,我在使用Ajax时遇到了一些问题。我的项目在laravel5中,它在Apache上运行,rewrite已启用,VerifyCsrfToken中间件已就位。我正在尝试向项目中的另一个路由发送POST请求。以下是我的Ajax的外观: $.ajax({ url: '/add-device/', type: 'POST', data: form_data, success: function(data) { console.log(data);

我在使用Ajax时遇到了一些问题。我的项目在
laravel5
中,它在
Apache
上运行,
rewrite
已启用,
VerifyCsrfToken
中间件已就位。我正在尝试向项目中的另一个路由发送POST请求。以下是我的Ajax的外观:

$.ajax({
    url: '/add-device/',
    type: 'POST',
    data: form_data,
    success: function(data)
    {
        console.log(data);
    },
        error: function(data)
    {
        console.log(data);
    }
});
当我单击触发此Ajax的按钮时,会得到
405:MethodNotAllowed
响应。所以我进入了
routes.php
,添加了一个GET路径。我还包括了我的邮寄路线:

Route::get('add-device', function()
{
    return 'hello';
});

Route::post('add-device', [
    'middleware' => 'auth',
    'uses' => 'FormController@add_device'
]);
我收到“hello”消息,因此这是作为get而不是POST发送的。我尝试使用
$.post
而不是
$.ajax
来强制发布,但仍然得到相同的行为。为了便于测量,这里是我的
.htaccess
文件:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

在你的邮寄路线上试试这个

Route::post('add-device', [
    'as' => 'add_device.post'
    'middleware' => 'auth',
    'uses' => 'FormController@add_device'
]);

所以我去掉了后面的斜杠,它突然起作用了。我不确定它到底为什么会这样,但它确实这样做了。我也把这个问题发到了。我建议那些与我有相同问题的人通读评论和其他线索,以便他们可以遵循我的步骤。我想我之前的一个步骤解决了一个问题,所以当我这次删除尾部斜杠时,它起了作用。谢谢大家的帮助

从ajax请求url中删除了尾随斜杠对我有用

是否缓存了路由?尝试运行
php artisan-route:clear
以确保您没有处理某些旧缓存。另外,确保路由确实已在
php artisan route:list
中注册。另外,强制性的
php artisan clear compiled
composer dump auto
php artisan optimize
可能会有所帮助。这将成为客户端问题,与您的路由或Laravel无关。请尝试
method:'post'
,而不是
type:'post'
。我觉得这是一个jquery错误,因为这里有很多问题都是关于同一个问题的。请尝试获取jquery的新副本。我试图用
https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js
我唯一能做的就是设置了
方法
类型
选项,在这种情况下
方法
总是覆盖
类型
。我得到的唯一错误是405。我的javascript的其余部分工作正常。我实际上能够重现这种行为:
url:'/add device/'
中的尾随斜杠似乎很关键。当我省略它时,它会忽略ajax设置并发出GET请求,如果我将其保留在那里,它会正确地发出POST请求。我还不太清楚这是为什么,似乎是一些HTTP sepcific的东西。然而,在jQuery2.1中,POST可以同时使用这两种语言,但是我得到了一个带有尾随斜杠的url的301响应——这实际上是.htaccess中定义的预期行为。但它还是会先发出POST请求。所以,如果可能的话,你应该升级你的Jquery版本。我试过了,但我仍然得到了一个405方法不允许。你能发布你的路由文件和控制台的屏幕截图吗?
Route::post('add-device', [
    'as' => 'add_device.post'
    'middleware' => 'auth',
    'uses' => 'FormController@add_device'
]);