Сообщение 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 (Внутренняя ошибка сервера)
Что не так/проблема с моим кодом? ничего не пропало?
Ответы
Ответ 1
Хотя этот вопрос существует некоторое время, но не принято никакого ответа, я бы хотел указать вам на решение. Поскольку вы отправляете с помощью ajax и, вероятно, по-прежнему используете промежуточное программное обеспечение CSRF, вам необходимо предоставить дополнительный заголовок вместе с запросом.
Добавьте метатег на каждую страницу (или основной макет): <meta name="csrf-token" content="{{ csrf_token() }}">
И добавьте в свой javascript файл (или раздел на странице):
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Смотрите https://laravel.com/docs/master/csrf#csrf-x-csrf-token для более подробной информации.
Ответ 2
90% внутренней ошибки сервера laravel ajax вызвано отсутствием токена CSRF. другие причины могут быть связаны:
- Неверный тип запроса (например, отправка сообщения для получения)
- Получен неверный тип данных (например, ajax ожидает JSON, а приложение возвращает строку)
- Ваш .htaccess неверно настроен
- Недостающий маршрут
- Ошибка кода
Подробнее об этом вы можете прочитать здесь: https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/
Ответ 3
Я предполагаю, что это было решено к настоящему времени, но все же самое лучшее, что нужно сделать, это отправить токен с вашей формой
{!! 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
});
Ответ 4
В приложении \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 глобально.
Ответ 5
Вы можете добавить свои URL-адреса в промежуточное программное обеспечение VerifyCsrfToken.php. URL-адреса будут исключены из проверки CSRF.
protected $except = [
"your url",
"your url/abc"
];
Ответ 6
По умолчанию Laravel поставляется с промежуточным программным обеспечением CSRF.
У вас есть 2 варианта:
- Отправить токен в запросе
- Отключить промежуточное ПО CSRF (не рекомендуется): в приложении \Http\Kernel.php удалить VerifyCsrfToken из $middleware array
Ответ 7
для меня эта причина ошибки для разных вещей.
У меня есть два вызова ajax на моей странице.
первый для сохранения комментария, а другой - для сохранения.
на моих маршрутах .php у меня было это:
Route::post('posts/show','[email protected]_comment');
Route::post('posts/show','[email protected]_like');
и я получил 500 внутренних ошибок сервера для моего сохранения, как ajax-вызов.
поэтому я изменяю тип запроса второй линии http на PUT, и ошибка исчезает.
вы также можете использовать PATCH.
возможно, это помогает.
Ответ 8
Вместо этого использование post jquery помогло мне решить эту проблему
$.post('url', data, function(response) {
console.log(response);
});
Ответ 9
вам нужно передать поле 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
Ответ 10
не забудьте добавить "использовать Illuminate\Http\Request;" на вашем контроллере
Ответ 11
Краткое и простое решение *
e.preventDefault();
var value = $('#id').val();
var id = $('#some_id').val();
url="{{url('office/service/requirement/rule_delete/')}}" +"/"+ id;
console.log(url);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
/* the route pointing to the post function */
url: url,
type: 'DELETE',
/* send the csrf-token and the input to the controller */
data: {message:value},
dataType: 'JSON',
/* remind that 'data' is the response of the AjaxController */
success: function (data) {
console.log(data)
//$('.writeinfo').append(data.msg);
//$('#ruleRow'+id).remove();
}
});
return false;