MethodNotAllowedHttpException при попытке отправить данные на контроллер через ajax в laravel - PullRequest
0 голосов
/ 28 декабря 2018

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

0 голосов
/ 31 декабря 2018

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

0 голосов
/ 28 декабря 2018

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

$.ajax({
    url: '{{route('addNewRoute')}}',
    method: 'POST',
    dataType: 'json',
    ...
});
0 голосов
/ 28 декабря 2018

Попробуйте:

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

0 голосов
/ 28 декабря 2018

Вы забыли / в своих маршрутах.

Route::group(['prefix' => 'admin'], function () {

Добавить / в admin/

Route::group(['prefix' => 'admin/'], function () {

Тогда вы можете попробовать это в вашем ajax

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

или

url: 'admin/addNewRoute',

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

0 голосов
/ 28 декабря 2018

Если метод 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");
    }
}); 
0 голосов
/ 28 декабря 2018

Вы использовали 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.

0 голосов
/ 28 декабря 2018

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

url: 'addNewRoute',

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

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

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

0 голосов
/ 28 декабря 2018

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

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