MethodNotAllowedHttpException при попытке отправить данные на контроллер через ajax в laravel
Я пытаюсь отправить динамически сгенерированные данные на контроллер через ajax в laravel. Когда пользователь выбирает опцию из выпадающего списка, тогда вместе с выбранной опцией и другими данными следует отправлять в контроллер.
Я пытался отправить данные в контроллер, когда выбрана опция из выпадающего списка. Но каждый раз, когда я пробую эту ошибку,
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException и в ошибке REQUEST_METHOD указано GET
Это где я вызываю функцию AJAX
$(document).on('change', '.route-code-selector', function() {
var selectorID = $(this).attr('id');
addRoutePlanDetails(selectorID);
});
Функция AJAX
function addRoutePlanDetails(selectorID) {
var routePlanCode = document.getElementById("routeplanno").value;
var driver = $("#selectDriver").val().split('|');
var salesman = $("#selectSalesman").val().split('|');
var router_01 = $("#selectRouter01").val().split('|');
var router_02 = $("#selectRouter02").val().split('|');
var vehicle_no = document.getElementById("enterVehicleNo").value;
var route_code = document.getElementById(selectorID).value;
var date = document.getElementById("date").value;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
$.ajax({
url: 'addNewRoute',
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
}
маршрут
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
Route::get ('route-plan', 'RoutePlanController@index');
Route::get ('excludePorterRes', 'RoutePlanController@excludePorterRes');
Route::get ('retreiveRouteData', 'RoutePlanController@retrieveRouteCodeData');
Route::get ('retreiveUserData', 'RoutePlanController@retreiveUserData');
Route::get ('retreiveNewRouteData', 'RoutePlanController@retreiveNewRouteData');
Route::post('addNewRoute', [
'uses' => 'RoutePlanController@insertNewRoute',
'as' => 'addNewRoute'
]);
});
контроллер
public function insertNewRoute(){
$routeplan = new Routeplan;
$user_email = auth()->user()->email;
$routeplan->RouteplanCode = Input::get('routePlanCode');
$routeplan->RouteCode = Input::get('route_code');
$routeplan->DriverID = Input::get('driver');
$routeplan->SalesmanID = Input::get('salesman');
$routeplan->Routercode1 = Input::get('router_01');
$routeplan->Routercode2 = Input::get('router_02');
$routeplan->VehicleNo = Input::get('vehicle_no');
$routeplan->Date = Input::get('date');
$routeplan->Createuser = $user_email;
$routeplan->Status = 'TEMP';
$routeplan->save();
}
когда пользователь выбирает опцию, все данные должны храниться в БД.
8 ответов
Ты забыл /
в ваших маршрутах.
Route::group(['prefix' => 'admin'], function () {
добавлять /
в admin/
Route::group(['prefix' => 'admin/'], function () {
Тогда вы можете попробовать это в вашем AJAX
url: '{{ url('admin/addNewRoute') }}',
или же
url: 'admin/addNewRoute',
Попробуйте, если это сработает.
Как многие из вас сказали... Я сменил метод на тип... И он все еще не работал. Но затем я посмотрел журналы Laravel (хранилище / журналы) и из журналов я обнаружил, что некоторые из моих синтаксисов контроллера являются неправильными. И именно поэтому он все еще дал мне 500 ошибок. После того, как я изменил синтаксис и сделаю исправления. Это сработало!! В любом случае спасибо за помощь, ребята! Если кто-то получает эту ошибку, даже если ваш ajax верен, взгляните на журналы Laravel. Надеюсь, это кому-нибудь поможет.
Попробуй это:
Пожалуйста, используйте url: '{{ route('addNewRoute') }}' вместо url: 'addNewRoute'.
Если ваш скрипт находится в блейд-файле, используйте route()
установить URL в AJAX:
$.ajax({
url: '{{route('addNewRoute')}}',
method: 'POST',
dataType: 'json',
...
});
Вы использовали prefix
для ваших маршрутов. Так что весь ваш маршрут в группе будет prefix/uri
, Так в ajax
позвонить вам следует url: '{{ url('admin/addNewRoute') }}',
и изменить method
в type
$.ajax({
url: '{{ url('admin/addNewRoute') }}',
type: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
В ajax
для уточнения HTTP Verb
использование type
не method
,
Вопрос здесь:
url: 'addNewRoute',
здесь вы неправильно называете маршрут, используйте его так:
url: '{{ url('admin/addNewRoute') }}',
Вы должны позвонить url()
метод, чтобы он мог создать правильный формат URL и не забывать addNewRoute
сгруппирован под admin
так что вы должны добавить это к вызову.
Если метод ajax выполняется во внешнем файле javascript, вы должны определить переменную url в blade
(обычно это макетирование), которое использует в качестве URL-адреса запроса ajax метод вызова ajax. (до загрузки файла.js);
пример var url = '{{ route('addNewRoute') }}'
$.ajax({
url: url',
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});
Если вы используете Ajax в лезвии, вы можете использовать напрямую route
как URL запроса ajax.
$.ajax({
url: "{{ route('addNewRoute') }}",
method: 'POST',
dataType: 'json',
data: {
routePlanCode: routePlanCode,
driver: driver[1],
salesman: salesman[1],
router_01: router_01[1],
router_02: router_02[1],
vehicle_no: vehicle_no,
route_code: route_code,
date: date
},
success: function() {
console.log("success");
}
});