Я пытаюсь отправить динамически сгенерированные данные на контроллер через ajax в laravel. Когда пользователь выбирает опцию из раскрывающегося списка, тогда вместе с выбранной опцией и другими данными должны быть отправлены контроллеру.
Я пытался отправить данные контроллеру, когда выбран вариант из раскрывающегося списка. Но каждый раз, когда я пробую эту ошибку,
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException and in the error REQUEST_METHOD is 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.info("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();
}
когда пользователь выбирает опцию, все данные должны храниться в db.
Запустите php artisan route:list, чтобы убедиться, что ваш маршрут действительно существует. (php artisan route:clear для очистки кешированных маршрутов)
это добавит /addNewRoute к текущему URL-адресу в окне, а не по отношению к вашему приложению.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуй один раз
url: '{{ route('addNewRoute') }}',
Я все еще получаю ошибку 500 Internal Server Error MethodNotAllowedHttpException
Можете ли вы объяснить, что вы имеете в виду и как это решает исключение, указанное в вопросе?
Проблема здесь:
url: 'addNewRoute',
здесь вы неправильно называете маршрут, используйте его так:
url: '{{ url('admin/addNewRoute') }}',
вам нужно вызвать метод url(), чтобы он мог создать правильный формат URL-адреса, и не забывайте, что addNewRoute сгруппирован в admin, поэтому вы должны добавить его при вызове.
Я все еще получаю ошибку 500 Internal Server Error MethodNotAllowedHttpException
Вы использовали 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.info("success");
}
});
В ajax для указания HTTP Verb используйте type, а не method.
Я все еще получаю ошибку 500 Internal Server Error MethodNotAllowedHttpException
@Kasun - это не method, а type в коде ajax.
Если метод 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.info("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.info("success");
}
});
Вы забыли / в своих маршрутах.
Route::group(['prefix' => 'admin'], function () {
Добавить / в admin/
Route::group(['prefix' => 'admin/'], function () {
Тогда вы можете попробовать это в своем ajax
url: '{{ url('admin/addNewRoute') }}',
или
url: 'admin/addNewRoute',
Попробуйте, если это сработает.
Нет необходимости в / в префиксе маршрута
если ваш скрипт находится в файле лезвия, используйте route() для установки URL-адреса в ajax:
$.ajax({
url: '{{route('addNewRoute')}}',
method: 'POST',
dataType: 'json',
...
});
Попробуй это:
Пожалуйста, используйте url: '{{route (' addNewRoute ')}}' вместо url: 'addNewRoute'.
Как многие из вас сказали ... Я сменил метод на тип ... И он все еще не работал. Но затем я просмотрел журналы laravel (хранилище / журналы) и из журналов обнаружил, что некоторые из синтаксиса моего контроллера неверны. И поэтому он все еще выдавал мне ошибку 500. После того, как я изменил синтаксис и внесу исправления. Это сработало !! В любом случае спасибо за помощь, ребята! Если кто-то получает эту ошибку, даже если ваш ajax правильный, посмотрите журналы laravel .. Надеюсь, это кому-то поможет.
url: 'addNewRoute',этот маршрут существует? Потому что вы добавили его в свой файл маршрутов