MethodNotAllowedHttpException при попытке отправить данные в контроллер через ajax в laravel

Я пытаюсь отправить динамически сгенерированные данные на контроллер через 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.

url: 'addNewRoute', этот маршрут существует? Потому что вы добавили его в свой файл маршрутов
brombeer 28.12.2018 09:51

Запустите php artisan route:list, чтобы убедиться, что ваш маршрут действительно существует. (php artisan route:clear для очистки кешированных маршрутов)

brombeer 28.12.2018 10:33

это добавит /addNewRoute к текущему URL-адресу в окне, а не по отношению к вашему приложению.

phpdroid 28.12.2018 10:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
270
8

Ответы 8

Попробуй один раз

url: '{{ route('addNewRoute') }}',

Я все еще получаю ошибку 500 Internal Server Error MethodNotAllowedHttpException

Kasun 28.12.2018 10:14

Можете ли вы объяснить, что вы имеете в виду и как это решает исключение, указанное в вопросе?

Nico Haase 28.12.2018 12:57

Проблема здесь:

url: 'addNewRoute',

здесь вы неправильно называете маршрут, используйте его так:

url: '{{ url('admin/addNewRoute') }}',

вам нужно вызвать метод url(), чтобы он мог создать правильный формат URL-адреса, и не забывайте, что addNewRoute сгруппирован в admin, поэтому вы должны добавить его при вызове.

Я все еще получаю ошибку 500 Internal Server Error MethodNotAllowedHttpException

Kasun 28.12.2018 10:14

Вы использовали 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 28.12.2018 10:14

@Kasun - это не method, а type в коде ajax.

Prashant Deshmukh..... 28.12.2018 10:17

Если метод 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',

Попробуйте, если это сработает.

Нет необходимости в / в префиксе маршрута

brombeer 28.12.2018 10:28

если ваш скрипт находится в файле лезвия, используйте route() для установки URL-адреса в ajax:

$.ajax({
    url: '{{route('addNewRoute')}}',
    method: 'POST',
    dataType: 'json',
    ...
});

Попробуй это:

Пожалуйста, используйте url: '{{route (' addNewRoute ')}}' вместо url: 'addNewRoute'.

Как многие из вас сказали ... Я сменил метод на тип ... И он все еще не работал. Но затем я просмотрел журналы laravel (хранилище / журналы) и из журналов обнаружил, что некоторые из синтаксиса моего контроллера неверны. И поэтому он все еще выдавал мне ошибку 500. После того, как я изменил синтаксис и внесу исправления. Это сработало !! В любом случае спасибо за помощь, ребята! Если кто-то получает эту ошибку, даже если ваш ajax правильный, посмотрите журналы laravel .. Надеюсь, это кому-то поможет.

Другие вопросы по теме