Я попытался исправить это все утро, и я не могу найти какой-либо рабочий метод в Интернете.
Я пытаюсь выполнить простой запрос ajax для своего контроллера Laravel и получить данные, которые он отправляет. Я упростил его до максимума, и я все еще получаю ERROR 500 с данными «undefined».
Кажется, что каждый пример onlines относится к Laravel 4.0, я не уверен, что они что-то изменили или нет, но никто не работает. Я также попытался изменить маршрут на «любой», и он работает с прямым доступом, но не с запросом ajax.
Благодарю.
Контроллер:
<?php namespace App\Http\Controllers; use Session, DB, Request; class AjaxController extends Controller { public function question() { print_r("Made It"); die(); } }
Маршрут:
Route::post('/ajax/question', 'AjaxController@question');
Javascript:
$.ajax({ url: "/ajax/question", method: 'POST', data: { 'answered': '1' }, processData: false, contentType: false, cache: false, success: function(data) { console.log(data); console.log("success"); }, error: function(data) { console.log(data); console.log("error"); } });
console.log (data) дает следующее:
readyState 4 responseText "" status 500 statusText "Internal Server Error" abort function(e) always function() complete function() done function() error function() fail function() getAllResponseHeaders function() getResponseHeader function(e) overrideMimeType function(e) pipe function() progress function() promise function(e) setRequestHeader function(e, t) state function() statusCode function(e) success function() then function()
егоreadyState 4 responseText "" status 500 statusText "Internal Server Error" abort function(e) always function() complete function() done function() error function() fail function() getAllResponseHeaders function() getResponseHeader function(e) overrideMimeType function(e) pipe function() progress function() promise function(e) setRequestHeader function(e, t) state function() statusCode function(e) success function() then function()
EDIT: Если я изменил запрос на GET, он работает правильно. (Настроить маршрут на любой)
Если вы посмотрите на консоль вашего браузера в ответ, скорее всего, вы попадаете на промежуточное ПО CSRF . Вам нужно отправить _token
с текущим значением для пользователя csrf_token()
.
Мы включаем это в наши макеты страниц, чтобы автоматически добавлять его ко всем запросам AJAX через заголовок (что понимает Ларавел):
<script> $(function() { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': {!! json_encode(csrf_token()) !!};, } }); }); </script>
Подробнее о том, как это работает, см. https://github.com/laravel/framework/blob/8687d42c6674e47efc093b5092ea217b62ba293a/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L55 .