Ajax Heroku上的Laravel-MethodNotAllowedHttpException
我想知道如何获得此方法NotAllowedHttpException。我一直在尝试将我的应用程序部署到heroku,但我一直遇到这个错误。我有一些邮寄路线: routes/web.php:Ajax Heroku上的Laravel-MethodNotAllowedHttpException,ajax,laravel,heroku,Ajax,Laravel,Heroku,我想知道如何获得此方法NotAllowedHttpException。我一直在尝试将我的应用程序部署到heroku,但我一直遇到这个错误。我有一些邮寄路线: routes/web.php: Route::get ('/', 'CodeController@index'); Route::get ('/api/token/', 'CodeController@token'); Route::post ('/api/checkpassword/', 'CodeControlle
Route::get ('/', 'CodeController@index');
Route::get ('/api/token/', 'CodeController@token');
Route::post ('/api/checkpassword/', 'CodeController@checkPassword');
Route::post ('/api/setpassword/', 'CodeController@setPassword');
Route::post ('/api/clearpassword/', 'CodeController@clearPassword');
Route::post ('/api/changeuri/', 'CodeController@changeUri');
Route::post ('/api/submission/', 'SubmissionController@submit');
Route::post ('/api/convert/', 'SubmissionController@convert');
Route::post ('/api/postresult/', 'CodeController@postResult');
Route::post ('/api/postdata/', 'CodeController@postData');
Route::get ('/api/getdata/', 'CodeController@getData');
Route::get ('/share/{uri}', 'CodeController@share');
Route::get ('/{uri}', 'CodeController@open');
在我的javascript文件中,我通过ajax方法访问它。以下是我的ajax方法之一:
$.ajax ({
url: '/api/checkpassword/',
type: 'POST',
data: {
"uri": uri,
"password": $('#password').val ()
},
success: function (data) {
if (data['status'] == 'success')
window.location.reload (true);
else {
$('#checkpassword-alert').html (data['status']);
$('#checkpassword-alert').show ();
}
},
error: function (jqXHR, textStatus, errorThrown) {
$('#checkpassword-alert').html (errorThrown);
$('#checkpassword-alert').show ();
}
});
在我本地的机器上一切都很好。它收到了正确的答复。但当我部署到heroku时,它会转到错误函数,并在#checkpassword alert
中显示方法不允许
不知何故,我可以找到工作的路线(但仍然没有如预期的那样)。我将所有POST路由更改(或添加)为GET,将所有ajax方法(类型)更改为“GET”,错误消失了。但我的控制器又出了一个错误。它告诉我一些参数(“uri”)没有设置(我检查了它是否在控制器中设置)
以下是我如何传递MethodNotAllowedHttpException的方法:
Route::get ('/', 'CodeController@index');
Route::get ('/api/token/', 'CodeController@token');
// or just simply change these POST routes to GET
Route::post ('/api/checkpassword/', 'CodeController@checkPassword');
Route::post ('/api/setpassword/', 'CodeController@setPassword');
Route::post ('/api/clearpassword/', 'CodeController@clearPassword');
Route::post ('/api/changeuri/', 'CodeController@changeUri');
Route::post ('/api/submission/', 'SubmissionController@submit');
Route::post ('/api/convert/', 'SubmissionController@convert');
Route::post ('/api/postresult/', 'CodeController@postResult');
Route::post ('/api/postdata/', 'CodeController@postData');
Route::get ('/api/getdata/', 'CodeController@getData');
Route::get ('/share/{uri}', 'CodeController@share');
Route::get ('/{uri}', 'CodeController@open');
Route::get ('/api/checkpassword/', 'CodeController@checkPassword');
Route::get ('/api/setpassword/', 'CodeController@setPassword');
Route::get ('/api/clearpassword/', 'CodeController@clearPassword');
Route::get ('/api/changeuri/', 'CodeController@changeUri');
Route::get ('/api/submission/', 'SubmissionController@submit');
Route::get ('/api/convert/', 'SubmissionController@convert');
Route::get ('/api/postresult/', 'CodeController@postResult');
Route::get ('/api/postdata/', 'CodeController@postData');
我不明白为什么在我部署它的时候这些路线不起作用。有人能帮我吗?如何通过cURL访问API,例如:
cURL-xpost{{your_HOST}/api/checkpassword-H'缓存控制:无缓存'-H'内容类型:application/x-www-form-urlencoded'-d'uri=xxx&password=yyy'
在您的js文件和web.php中尝试/api/checkpassword而不是/api/checkpassword/,以便发布method@Alfa它不等于ajax请求吗?@Aditya Singh哇,它成功了!这是怎么可能的?实际上,当您发送get请求时,您的参数将附加在尾随的反斜杠之后,因此,如果您的url为abc.com/它将成为abc.com/?a=2,但是post没有这种功能,因此“/”间接指的是目录而不是文件。请检查服务器上的htaccess文件,因为后面的反斜杠通常会被忽略。很高兴我能帮忙