Ошибка Laravel 405 (метод не разрешен) Публикация Ajax

Привет, я хочу отправить свои данные с помощью ajax на мой контроллер.

Мой КОД

АЯКС

  $.ajax( {
    type:'POST',
    header:{
      'X-CSRF-TOKEN':$('meta[name = "csrf-token"]').attr('content')
    },
    url:"{{route('race.post')}}",
    data:{
      _token: "{{ csrf_token() }}",
      dataType: 'json', 
      contentType:'application/json', 
    }


})
.done(function() {
    alert('success');
})
.fail(function() {
    alert("error");
});

КОНТРОЛЛЕР

 public function Points(Request $request){
    $test = $request->input('data');
    return "$test";
}

МАРШРУТ

Route::post('updateC', ['uses' =>'RacesController@Points', 'as' => 'race.post']); 

И есть ошибки, которые я получаю.

Приставка

Предварительный просмотр сети

Сетевой ответ

Я думаю, у вас есть отдельный файл .js для ajax. поэтому ваш маршрут и csrf_token не работают.

ThataL 07.03.2019 10:48

Это правда, у меня есть отдельный файл js для ajax.

Patrik 07.03.2019 10:49

Вот почему это не работает. для csrf_token используйте метатег. а для URL-адреса передать URL-адрес в качестве параметра для javascript onclick или функции Onchange. Могу ли я увидеть ваш файл .js, когда позвонит ajax..

ThataL 07.03.2019 10:52

попробуйте мой ответ, как показано ниже. Я изменил код, сравнив предыдущий и текущий вопрос от вас.

ThataL 07.03.2019 11:05
Поведение ключевого слова "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) для оценки ваших знаний,...
1
4
11 982
8

Ответы 8

Поскольку вы работаете с файлом JavaScript, а не с файлом Blade, вспомогательный метод route() не работает, а маршрут «race.post» не преобразуется в URL-адрес.

Попробуйте изменить URL на это:

url: '/updateC'

Если вы хотите использовать помощник route() в своем JavaScript, вы должны добавить скрипт в файл Blade и json_encode значения, вы можете прочитать больше об этом в этот ответ.

Когда я использовал этот способ url: '/updateC', он просто сказал метод 405 (метод не разрешен).

Patrik 07.03.2019 10:39

Попробуйте запустить php artisan route:list и сравните маршрут с маршрутом на вкладке консоли/сети. Адаптируйте маршрут в вызове ajax к тому, который показан в вашем списке маршрутов.

piscator 07.03.2019 10:40

Он говорит использовать createPoints, но когда я его использовал, выдается ошибка 419 (неизвестный статус).

Patrik 07.03.2019 10:45

@Patrik, проверь мой ответ (комментарий) на твой предыдущий вопрос.

ThataL 07.03.2019 10:45

Отлично, значит проблема решена. 419 означает, что csrf_token неправильный. Существует ли этот метатег в вашем файле блейда: <meta name = "csrf-token" content = "{{ csrf_token() }}">? Попробуйте записать, если jQuery найдет значение токена csrf.

piscator 07.03.2019 10:49

У меня есть другой способ его использования: АЯКС

data = {
        selectmanufacturer: selectmanufacturer,
        categories: selectCategory,
        _token: "{{csrf_token()}}",
        productName: productName
      };
     $.ajax({
        url: '{{URL::to('/all-products-data')}}',
        type: 'POST',
        dataType: 'json',
        data: data,
        success: function (response) {
        },
          error: function (response) {
            alert(response);
          }
        });

Контроллер:

public function Points(Request $request){
    $test = $request->all();
    return "$test";
}

Я надеюсь, что это будет полезно для вас

Я попробовал, и он сказал, что URL-адрес был найден 404 (не найден).

Patrik 07.03.2019 10:41

URL-адрес, который вы публикуете, не выглядит правильно в опубликованном вами консольном выводе. В вашем коде AJAX у вас есть это:

url:"{{route('race.post')}}"

Но это просто интерпретируется как есть, это нет интерпретируется как значение этого маршрута в Laravel.

Вам нужно убедиться, что ваш код JavaScript находится в шаблоне Blade, если вы хотите анализировать теги Blade.

Я думаю, что у него есть отдельный файл js, поэтому csrf_token и url не работают.

ThataL 07.03.2019 10:49

Да, именно поэтому я сказал, что @Patrik должен убедиться, что код JavaScript находится в шаблоне Blade.

Martin Bean 07.03.2019 14:27

не введите: «POST», метод: «POST», попробуйте приведенный ниже код, который я изменил. ref: Ссылка на ссылку HTML-код

<button onClick = "onBtnClick()" data-url = "{{route('race.post')}}"></button>

Обновленный код

function onBtnClick(){
    var token = $('meta[name = "csrf-token"]').attr('content');
    var url = $(this).attr("data-url");    
    $.ajax( {
        method:'POST',
        header:{
          'X-CSRF-TOKEN': token
        },
        url: url,
        data:{
          _token: token,
          dataType: 'json', 
          contentType:'application/json', 
        }        
    })
    .done(function() {
        alert('success');
    })
    .fail(function() {
        alert("error");
    });
}

добавьте это в свой файл layout.blade

<meta name = "csrf-token" content = "{{ csrf_token() }}">

затем используйте это в своем коде js

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
    }
});

Я надеюсь, это поможет!!

Я просто удалил косую черту в конце URL-адреса, и он начал работать... /managers/games/id/push/ в:

$http({
  method: 'POST',
  url: "/managers/games/id/push",

ОМГ, вот что со мной происходило! Я не могу поверить, что потерял 3 часа в поисках ошибки! Спасибо!

Janbalik 02.10.2020 16:42

Большое спасибо, Гарри, я искал решение последние полчаса. Это сработало

Arshi 01.10.2021 13:44

Это решение, возможно, работает, когда конфигурация вашего сервера отличается от конфигурации laravel valet. Моя конечная точка отлично работает в локальной среде, размещенной у камердинера, даже если в конце есть «/», но в моем развертывании serverpilot за cloudflare он не работал с 405.

İlter Kağan Öcal 09.10.2021 13:12

Во-первых, мы поместили два маршрута: один для отображения представления, а другой для поста ajax. Так просто добавьте оба маршрута в свой файл маршрута.

маршруты/web.php

Route::get('ajaxRequest', 'RacesController@Points');

Route::post('ajaxRequest', 'RacesController@Points');

Включите этот метатег в свое представление

<meta name = "csrf-token" content = "{{ csrf_token() }}" />

Включите код javascript в свой вызов ajax

$.ajaxSetup({

    headers: {

        'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')

    }

}); 

Проверьте, правильно ли настроен ваш маршрут laravel для этого запроса. В моем случае у меня были $.ajax url: "crop-image-upload" и Route::post('crop-image-upload ', 'CropImageController@uploadCropImage'); Но запрос был отправлен на http://127.0.0.1:8000/news/crop-image-upload Поэтому мне пришлось изменить свой маршрут на Route::post('/news/crop-image-upload ', 'CropImageController@uploadCropImage');

Итак, в вашем случае попробуйте добавить буквальный URL-адрес на ajax следующим образом:

url:"/races/updateC"

и добавьте «гонки/» в маршрут следующим образом:

Route::post('/races/updateC', ['uses' =>'RacesController@Points', 'as' => 'race.post']); 

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