это мой тест 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:
Подробнее об этом можно прочитать здесь: 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 варианта:
для меня эта ошибка причина разных вещей. У меня есть два вызова 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