Сообщение ajax в laravel 5 возвращает ошибку 500 (Внутренняя ошибка сервера)

это мой тест ajax в laravel 5 (см. ниже)

$("#try").click(function(){ var url = $(this).attr("data-link"); $.ajax({ url: "test", type:"POST", data: { testdata : 'testdatacontent' }, success:function(data){ alert(data); },error:function(){ alert("error!!!!"); } }); //end of ajax }); 

и триггерное звено

 <a href="#" id="try" data-link="{{ url('/test') }}">Try</a> 

и мой маршрут

 Route::post('test', function() { return 'Success! ajax in laravel 5'; }); 

но это дает мне ошибку, когда я запускаю консоль в google chrome и не возвращает ожидаемый ответ «return» Success! ajax in laravel 5 '; "

POST http://juliver.laravel.com/test 500 (Внутренняя ошибка сервера)

Что случилось / проблема с моим кодом? ничего не пропало?

Хотя этот вопрос существует какое-то время, но ответа не принято, я хотел бы указать вам на решение. Поскольку вы отправляете с помощью ajax и предположительно по-прежнему используете промежуточное программное обеспечение CSRF, вам необходимо предоставить дополнительный заголовок с вашим запросом.

Добавьте метатег на каждую страницу (или мастер-макет): <meta name="csrf-token" content="{{ csrf_token() }}">

И добавьте в свой javascript-файл (или раздел на странице):

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

Подробнее см. http://laravel.com/docs/master/routing#csrf-x-csrf-token .

Я предполагаю, что это было решено к настоящему времени, но все же самое лучшее, что можно сделать здесь, это отправить токен с вашей формой

 {!! csrf_field() !!} 

а затем в вашем ajax

 $("#try").click(function(){ var url = $(this).attr("data-link"); $.ajax({ url: "test", type:"POST", data: { '_token': token, 'someOtherData': someOtherData }, success:function(data){ alert(data); },error:function(){ alert("error!!!!"); } }); //end of ajax }); 

90% внутренней ошибки сервера larvel ajax связано с отсутствием токена CSRF. другие причины могут inlucde:

  • Неверный тип запроса (например, отправка сообщения для получения)
  • Неверный тип данных (например, ajax ожидает, что строка JSON и app вернется)
  • Ваш .htaccess неверно настроен
  • Отсутствующий маршрут
  • Ошибка кода

Подробнее об этом можно прочитать здесь: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/

В приложении \ Http \ Middleware \ VerifyCsrfToken.php вы можете попробовать обновить файл примерно так:

 class VerifyCsrfToken extends BaseVerifier { private $openRoutes = [ ...excluded routes ]; public function handle($request, Closure $next) { foreach($this->openRoutes as $route) { if ($request->is($route)) { return $next($request); } } return parent::handle($request, $next); } }; 

Это позволяет явно обойти определенные маршруты, которые вы не хотите проверять, без отключения проверки csrf во всем мире.

Вы можете добавить свои URL-адреса в промежуточное программное обеспечение VerifyCsrfToken.php. URL-адреса будут исключены из проверки CSRF.

 protected $except = [ "your url", "your url/abc" ]; 

По умолчанию Laravel поставляется с промежуточным программным обеспечением CSRF.

У вас есть 2 варианта:

  1. Отправить токен в запросе
  2. Отключить промежуточное ПО CSRF (не рекомендуется): в приложении \ Http \ Kernel.php удалить VerifyCsrfToken из $ middleware array

для меня эта ошибка причина разных вещей. У меня есть два вызова ajax на моей странице. первый для сохранения комментария, а другой – для сохранения. на моих маршрутах.php у меня было:

 Route::post('posts/show','PostController@save_comment'); Route::post('posts/show','PostController@save_like'); 

и я получил 500 внутренних ошибок сервера для моего сохранения, как ajax-вызов. поэтому я изменяю тип запроса второй линии http на PUT, и ошибка исчезает. вы также можете использовать PATCH. возможно, это помогает.

Использование post jquery вместо этого помогло мне решить эту проблему

 $.post('url', data, function(response) { console.log(response); }); 

вы должны передать поле csrf через ajax, пожалуйста, посмотрите здесь код

 $.ajax({ type: "POST", url:'{{URL::to("/delete-specialist")}}', data: { id: id, _token: $('#signup-token').val() }, datatype: 'html', success: function (response) { if(response=="deleted"){ $("#"+id).hide(); $("#message").html("successfully deleted"); } } }); 

и вам также нужно написать это поле ввода до этого

 <input id="signup-token" name="_token" type="hidden" value="{{csrf_token()}}"> 

если вы не понимаете, пожалуйста, наслаждайтесь этим видео https://www.youtube.com/watch?v=ykXL8o0slJA&t=20s