I'm using same form to insert, search and update data. For insert I'm using Laravel's store method and to search and update, using Ajax.
Record inserting and searching of text fields works fine but when updating record it throws an error "The POST method is not supported for this route. Supported methods: GET, HEAD, PUT."
Added blade directive @method('PUT') in form still showing same error.
Route:
Route::get('search-data/{sid?}', 'DataController@dataSearch');
Route::put('update-data/{sid?}', 'DataController@dataUpdate');
Controller:
use App\exModel;
public function dataSearch($sid)
{
$search = exModel::find($sid);
return Response::json($search);
}
public function dataUpdate(Request $request, $sid)
{
$var = exModel::find($sid);
$var->name = $request->name;
$var->save();
return Response::json($var);
}
Script:
//Search
$(document).ready(function () {
$('#search').on('keydown', function(e) {
if(e.which == 13){
var sid = $("#search").val();
$.ajax({
url: '{{ URL::to('search-data/')}}'+"/"+ sid,
type: "Get",
dataType: 'json',
success: function(response){
$('#Getname').val(response.name);
}
});
}
});
});
//Update
$("#btn-update").click(function (e) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
e.preventDefault();
var formData = {
name: $('#Getname').val(),
}
var sid = $('#search').val();
console.log(formData);
$.ajax({
url: '{{ URL::to('update-data/')}}'+"/"+ sid,
type: 'PUT',
data: formData,
dataType: 'json',
success: function (response) {
console.log(response);
$('#Getname').val(response.name);
},
});
});
View:
<form method="POST" action="{{ route('data.store') }}">
@method('PUT')
@csrf
<div>
<label>ID No</label>
<input type="text" id="search" class="form-control">
</div>
<div>
<label>Name</label>
<input type="text" name="name" id="Getname" class="form-control">
</div>
<div>
<button class="btn btn-success" input type="button" onclick="this.form.submit()">Save</button>
</div>
<div>
<button class="btn btn-info" type="button" id="btn-update">Update Record
</button>
</div>
</form>