Привет, я хочу отправить свои данные с помощью 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 используйте метатег. а для URL-адреса передать URL-адрес в качестве параметра для javascript onclick или функции Onchange. Могу ли я увидеть ваш файл .js, когда позвонит ajax..
попробуйте мой ответ, как показано ниже. Я изменил код, сравнив предыдущий и текущий вопрос от вас.



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


Поскольку вы работаете с файлом JavaScript, а не с файлом Blade, вспомогательный метод route() не работает, а маршрут «race.post» не преобразуется в URL-адрес.
Попробуйте изменить URL на это:
url: '/updateC'
Если вы хотите использовать помощник route() в своем JavaScript, вы должны добавить скрипт в файл Blade и json_encode значения, вы можете прочитать больше об этом в этот ответ.
Когда я использовал этот способ url: '/updateC', он просто сказал метод 405 (метод не разрешен).
Попробуйте запустить php artisan route:list и сравните маршрут с маршрутом на вкладке консоли/сети. Адаптируйте маршрут в вызове ajax к тому, который показан в вашем списке маршрутов.
Он говорит использовать createPoints, но когда я его использовал, выдается ошибка 419 (неизвестный статус).
@Patrik, проверь мой ответ (комментарий) на твой предыдущий вопрос.
Отлично, значит проблема решена. 419 означает, что csrf_token неправильный. Существует ли этот метатег в вашем файле блейда: <meta name = "csrf-token" content = "{{ csrf_token() }}">? Попробуйте записать, если jQuery найдет значение токена csrf.
У меня есть другой способ его использования: АЯКС
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 (не найден).
URL-адрес, который вы публикуете, не выглядит правильно в опубликованном вами консольном выводе. В вашем коде AJAX у вас есть это:
url:"{{route('race.post')}}"
Но это просто интерпретируется как есть, это нет интерпретируется как значение этого маршрута в Laravel.
Вам нужно убедиться, что ваш код JavaScript находится в шаблоне Blade, если вы хотите анализировать теги Blade.
Я думаю, что у него есть отдельный файл js, поэтому csrf_token и url не работают.
Да, именно поэтому я сказал, что @Patrik должен убедиться, что код JavaScript находится в шаблоне Blade.
не введите: «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 часа в поисках ошибки! Спасибо!
Большое спасибо, Гарри, я искал решение последние полчаса. Это сработало
Это решение, возможно, работает, когда конфигурация вашего сервера отличается от конфигурации laravel valet. Моя конечная точка отлично работает в локальной среде, размещенной у камердинера, даже если в конце есть «/», но в моем развертывании serverpilot за cloudflare он не работал с 405.
Во-первых, мы поместили два маршрута: один для отображения представления, а другой для поста 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']);
Я думаю, у вас есть отдельный файл .js для ajax. поэтому ваш маршрут и csrf_token не работают.