我正在尝试做一个Ajax帖子,允许人们通过安装程序中途测试数据库连接,但我不断收到此错误:
Failed to load resource: the server responded with a status of 405 (HTTP/2.0 405)
除了:
{
"message": "",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException",
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
"line": 255,
"trace": [
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
"line": 242,
"function": "methodNotAllowed",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
"line": 176,
"function": "getRouteForMethods",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 613,
"function": "match",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 602,
"function": "findRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 591,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 176,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 30,
"function": "Illuminate\\Foundation\\Http\\{closure}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/fideloper/proxy/src/TrustProxies.php",
"line": 57,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 149,
"function": "handle",
"class": "Fideloper\\Proxy\\TrustProxies",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 53,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 30,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 149,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 53,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 30,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 149,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 53,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 149,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 53,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
"line": 46,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 149,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
"line": 53,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 102,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 151,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 116,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/home/vagrant/code/public/index.php",
"line": 55,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
}
]
}
我已经以不同的方式将CSRF令牌添加到Ajax设置中。我通过php artisan route:list检查了我的路线。我使用了$ .ajax和$ .post。我已经更改了我的路由网址,以便它们与任何获取请求都不匹配(因为有时它会从get中返回html)。最后我禁用了CSRF保护,我使用Postman进行了测试,一切正常,因此前端代码出错了。
前端代码:
{!! Form::open(array('route' => 'postInstall', 'class' => 'f1 install', 'method' => 'put')) !!}
<h3>ComedyLounge Site Installer</h3>
<p>Setup basic requirements for your site</p>
<div class="f1-steps">
<div class="f1-progress">
<div class="f1-progress-line" data-now-value="16.66" data-number-of-steps="4" style="width: 16.66%;"></div>
</div>
<div class="f1-step active">
<div class="f1-step-icon"><i class="fa fa-check"></i></div>
<p>Requirements</p>
</div>
<div class="f1-step">
<div class="f1-step-icon"><i class="fa fa-database"></i></div>
<p>DB Settings</p>
</div>
<div class="f1-step">
<div class="f1-step-icon"><i class="fa fa-envelope"></i></div>
<p>Email Settings</p>
</div>
<div class="f1-step">
<div class="f1-step-icon"><i class="fa fa-thumbs-up"></i></div>
<p>Confirm</p>
</div>
</div>
<fieldset>
<h4>PHP Version:</h4>
@if(version_compare(phpversion(), '7.1.3', '<'))
<div class="alert alert-warning">
Warning: Requires PHP >= 7.1.3 Your version is {{phpversion()}}
</div>
@else
<div class="alert alert-success">
Success: Requires PHP >= 7.1.3 Your version is {{phpversion()}}
</div>
@endif
<h4>Extensions:</h4>
<table class="table table-striped">
<thead>
<tr>
<th></th>
<th>Found</th>
</tr>
</thead>
<tbody>
@foreach($requirements as $requirement => $found)
<tr>
<td>{{$requirement}}</td>
@if($found)
<td><i class="fa fa-check"></i></td>
@else
<td><i class="fa fa-times"></i></td>
@endif
</tr>
@endforeach
</tbody>
</table>
<div class="f1-buttons">
<button type="button" class="btn btn-next" {!! $canContinue ? '' : 'disabled' !!}>Next</button>
</div>
</fieldset>
<fieldset>
<h4>Database Settings:</h4>
<div class="form-group">
{!! Form::label('database_type', 'Database Type') !!}
{!! Form::select('database_type', array('sqlite' => 'SQLite','mysql' => 'MySQL', 'pgsql' => 'Postgres', 'sqlsrv' => 'SQLSrv'), Input::old('database_type'), array('class' => 'form-control database-selector')) !!}
</div>
<div class="database_group db_sqlite">
<div class="form-group">
{!! Form::label('database_sqlite_host', 'SQLite Database') !!}
{!! Form::text('database_sqlite_host', Input::old('database_sqlite_host'), array('class' => 'form-control', 'placeholder' => 'path/to/sqlite/db')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlite_prefix', 'SQLite Prefix') !!}
{!! Form::text('database_sqlite_prefix', Input::old('database_sqlite_prefix'), array('class' => 'form-control', 'placeholder' => 'cl_')) !!}
</div>
</div>
<div class="database_group db_mysql">
<div class="form-group">
{!! Form::label('database_mysql_host', 'MySQL Host') !!}
{!! Form::text('database_mysql_host', Input::old('database_mysql_host'), array('class' => 'form-control', 'placeholder' => '127.0.0.1')) !!}
</div>
<div class="form-group">
{!! Form::label('database_mysql_port', 'MySQL Port') !!}
{!! Form::text('database_mysql_port', Input::old('database_mysql_port'), array('class' => 'form-control', 'placeholder' => '3306')) !!}
</div>
<div class="form-group">
{!! Form::label('database_mysql_database', 'MySQL Name') !!}
{!! Form::text('database_mysql_database', Input::old('database_mysql_database'), array('class' => 'form-control', 'placeholder' => 'ComedyDatabase')) !!}
</div>
<div class="form-group">
{!! Form::label('database_mysql_username', 'MySQL Username') !!}
{!! Form::text('database_mysql_username', Input::old('database_mysql_username'), array('class' => 'form-control', 'placeholder' => 'User')) !!}
</div>
<div class="form-group">
{!! Form::label('database_mysql_password', 'MySQL Password') !!}
{!! Form::text('database_mysql_password', Input::old('database_mysql_password'), array('class' => 'form-control', 'placeholder' => 'Password')) !!}
</div>
<div class="form-group">
{!! Form::label('database_mysql_prefix', 'MySQL Prefix') !!}
{!! Form::text('database_mysql_prefix', Input::old('database_mysql_prefix'), array('class' => 'form-control', 'placeholder' => 'cl_')) !!}
</div>
</div>
<div class="database_group db_pgsql">
<div class="form-group">
{!! Form::label('database_pgsql_host', 'Postgres Host') !!}
{!! Form::text('database_pgsql_host', Input::old('database_pgsql_host'), array('class' => 'form-control', 'placeholder' => '127.0.0.1')) !!}
</div>
<div class="form-group">
{!! Form::label('database_pgsql_port', 'Postgres Port') !!}
{!! Form::text('database_pgsql_port', Input::old('database_pgsql_port'), array('class' => 'form-control', 'placeholder' => '3306')) !!}
</div>
<div class="form-group">
{!! Form::label('database_pgsql_database', 'Postgres Name') !!}
{!! Form::text('database_pgsql_database', Input::old('database_pgsql_database'), array('class' => 'form-control', 'placeholder' => 'ComedyDatabase')) !!}
</div>
<div class="form-group">
{!! Form::label('database_pgsql_username', 'Postgres Username') !!}
{!! Form::text('database_pgsql_username', Input::old('database_pgsql_username'), array('class' => 'form-control', 'placeholder' => 'User')) !!}
</div>
<div class="form-group">
{!! Form::label('database_pgsql_password', 'Postgres Password') !!}
{!! Form::text('database_pgsql_password', Input::old('database_pgsql_password'), array('class' => 'form-control', 'placeholder' => 'Password')) !!}
</div>
<div class="form-group">
{!! Form::label('database_pgsql_prefix', 'Postgres Prefix') !!}
{!! Form::text('database_pgsql_prefix', Input::old('database_pgsql_prefix'), array('class' => 'form-control', 'placeholder' => 'cl_')) !!}
</div>
</div>
<div class="database_group db_sqlsrv">
<div class="form-group">
{!! Form::label('database_sqlsrv_host', 'SQLSrv Host') !!}
{!! Form::text('database_sqlsrv_host', Input::old('database_sqlsrv_host'), array('class' => 'form-control', 'placeholder' => '127.0.0.1')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlsrv_port', 'SQLSrv Port') !!}
{!! Form::text('database_sqlsrv_port', Input::old('database_sqlsrv_port'), array('class' => 'form-control', 'placeholder' => '3306')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlsrv_database', 'SQLSrv Name') !!}
{!! Form::text('database_sqlsrv_database', Input::old('database_sqlsrv_database'), array('class' => 'form-control', 'placeholder' => 'ComedyDatabase')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlsrv_username', 'SQLSrv Username') !!}
{!! Form::text('database_sqlsrv_username', Input::old('database_sqlsrv_username'), array('class' => 'form-control', 'placeholder' => 'User')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlsrv_password', 'SQLSrv Password') !!}
{!! Form::text('database_sqlsrv_password', Input::old('database_sqlsrv_password'), array('class' => 'form-control', 'placeholder' => 'Password')) !!}
</div>
<div class="form-group">
{!! Form::label('database_sqlsrv_prefix', 'SQLSrv Prefix') !!}
{!! Form::text('database_sqlsrv_prefix', Input::old('database_sqlsrv_prefix'), array('class' => 'form-control', 'placeholder' => 'cl_')) !!}
</div>
</div>
<div class="f1-buttons">
<a href="/install?testDB=yezsir" type="button" class="btn btn-left btn-testdb">Test Connection</a>
<button type="button" class="btn btn-previous">Previous</button>
<button type="button" class="btn btn-next">Next</button>
</div>
</fieldset>
<fieldset>
<h4>Set up your account:</h4>
<div class="form-group">
<label class="sr-only" for="f1-email">Email</label>
<input type="text" name="f1-email" placeholder="Email..." class="f1-email form-control" id="f1-email">
</div>
<div class="form-group">
<label class="sr-only" for="f1-password">Password</label>
<input type="password" name="f1-password" placeholder="Password..." class="f1-password form-control" id="f1-password">
</div>
<div class="form-group">
<label class="sr-only" for="f1-repeat-password">Repeat password</label>
<input type="password" name="f1-repeat-password" placeholder="Repeat password..."
class="f1-repeat-password form-control" id="f1-repeat-password">
</div>
<div class="f1-buttons">
<button type="button" class="btn btn-previous">Previous</button>
<button type="button" class="btn btn-next">Next</button>
</div>
</fieldset>
<fieldset>
<h4>Social media profiles:</h4>
<div class="form-group">
<label class="sr-only" for="f1-facebook">Facebook</label>
<input type="text" name="f1-facebook" placeholder="Facebook..." class="f1-facebook form-control" id="f1-facebook">
</div>
<div class="form-group">
<label class="sr-only" for="f1-twitter">Twitter</label>
<input type="text" name="f1-twitter" placeholder="Twitter..." class="f1-twitter form-control" id="f1-twitter">
</div>
<div class="form-group">
<label class="sr-only" for="f1-google-plus">Google plus</label>
<input type="text" name="f1-google-plus" placeholder="Google plus..." class="f1-google-plus form-control" id="f1-google-plus">
</div>
<div class="f1-buttons">
<button type="button" class="btn btn-previous">Previous</button>
<button type="submit" class="btn btn-submit">Submit</button>
</div>
</fieldset>
{!! Form::close() !!}
<script>
$(function () {
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});
$('.btn-testdb').on('click', function (e) {
console.log($("form.install").serialize());
$.get("{{ route("postInstallTestDB") }}", $("form.install").serialize())
.done(function (data) {
alert(data)
});
e.preventDefault();
});
})
</script>
路线:
Route::get('/install', [
'as' => 'getInstall',
'uses' => 'InstallController@getInstaller',
]);
Route::post('/install', [
'as' => 'postInstall',
'uses' => 'InstallController@postInstaller',
]);
Route::post('/install/testdb', [
'as' => 'postInstallTestDB',
'uses' => 'InstallController@postInstallerTestDB',
]);
我不知道我做错了什么,我检查了每一篇文章,并尝试了几乎所有的东西。 (可能是我想念的小事)
我使用的是最新版本的laravel。
答案 0 :(得分:0)
来自错误消息的响应代码405表示“不允许的方法”。
在您的前端代码中,您尝试通过put访问路径postInstall,但在您的路线中,postInstall被设置为发布请求。
更改
{!! Form::open(array('route' => 'postInstall', 'class' => 'f1 install', 'method' => 'put')) !!}
到
{!! Form::open(array('route' => 'postInstall', 'class' => 'f1 install', 'method' => 'post')) !!}
答案 1 :(得分:0)
好的,我发现了问题,它与我的ajax功能有关。我的脚本现在看起来像这样:
<script>
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});
$('.btn-testdb').on('click', function (e) {
$.ajax({
url: "/install/testdb",
type: "post",
method: "post",
data: $("form.install").serialize(),
success: function(data) {
console.log(data);
},
error: function (data) {
console.log("error: " + data);
},
});
e.preventDefault();
});
</script>
感谢所有帮助过的人。