jQuery Ajax POST请求作为GET与Laravel一起发送
我在使用Ajax时遇到了一些问题。我的项目在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);
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'
]);