Внутренняя ошибка сервера 500 Laravel 5.4 AJAX

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

Не удалось загрузить ресурс: сервер ответил статусом 500 (внутренняя ошибка сервера)

https://i.stack.imgur.com/gjIbU.png

Вот мой AJAX

$('#testAjax').on('click',function(){
$.post('{{ route('edit') }}',{body:'string',_token:'{{ Session::token() }}'},function(data){
    console.info(JSON.stringify(data));
  });
});

Мои маршруты

Route::post('/edit',[ 'uses'=>'AjaxController@getProfessions', 'as'=>'edit']);

Мой Контроллер

public function getProfessions(Request $request)
{
  $this->validate($request, [
        'body' => 'required'
    ]);
    $p = profession::where('categories_id'=>$request['postId']);
    return response()->json(['new_body' => 'Server'], 200);
}

В настоящее время мне нужен только ответ «Сервер» от сервера, а не «строка» от ajax сам, поэтому я знаю, что он исходит с сервера

Привет, Мартин, что за сообщение об ошибке

Walter Cejas 11.12.2018 05:24

@WalterCejas Не удалось загрузить ресурс: сервер ответил статусом 500 (внутренняя ошибка сервера)

Martin Christopher 12.12.2018 06:50

В 90 процентах случаев вы можете найти полную ошибку, контроллер и строку в вашем .log файле в хранилище / журналах, или также щелкнув запрос в сети, просмотрев вкладку предварительного просмотра или ответа ..

Walter Cejas 12.12.2018 06:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
1 381
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Profession::where...

Во-вторых, вы не обрабатываете ответ об ошибке, вам следует добавить в свой Javascript функцию для ее обработки, например:

error: function(data) {
    console.info(data)
}

В-третьих, вы пытаетесь получить postId из запроса, но не отправляете его.

Пожалуйста, измените свой код и сообщите нам результат.

Вы неправильно используете $ .post, попробуйте следующее:

$.post( "{!! route('edit') !!}", { body:'string',_token: {!! Session::token() !!} })
  .done(function( data ) {
    console.info(JSON.stringify(data));
  });
  • Проверьте файл и строку с ошибкой 500 в файле журнала (хранилище / журналы).
  • Оберните свой логический код в try / catch для обработки ошибки.
  • Используйте IDE, например PHPStorm с XDebug, для отладки запроса и проверьте, правильно ли установлены все параметры запроса, такие как токен и строка.
Ответ принят как подходящий

в вашем маршруты / web.php

Route::post('/edit','AjaxController@getProfessions')->name('edit');

в вашем контроллере:

use Illuminate\Support\Facades\Validator;

public function getProfessions(Request $request)
{


 try {
        $validator = Validator::make($request->all(), [
                'postId' => 'required',
                'body' => 'required'
            ]
        );

        if ($validator->fails()) {
            $response=array('status'=>'error','errors'=>implode(',', $validator->errors()->all()));
            return response()->json($response, 200);
        }else{
           $profession = Profession::where(['categories_id'=>$request->input('postId')])->first();
           if ($profession){
             $profession->body=$request->input('body');
             $profession->save();
             return response()->json(['profession'=>$profession], 200);
           }else{
               $response=array('status'=>'error','errors'=>'profession not found');
               return response()->json($response, 200);
            }

        }
   }catch(\Exception $e){
        $response=array('status'=>'error','errors'=>'Internal Server Error');
        return response()->json($response, 500);
  }
}

в окне редактирования лезвия вы передаете $ Professional для просмотра, затем:

<meta name = "csrf-token" content = "{{ csrf_token() }}" />

<form>
    <input type = "hidded" id = "postID" name = "postID" value = "{{$profession->postID}}" />
    <input type = "text" id = "body" name = "body" value = "{{$profession->body}}" />
   <button type = "button" id = "testAjax">Submit using AJAX</button>
</form>

в вашей функции ajax:

$('#testAjax').on('click',function(){
     var postID=$('#postID').val();
     var body=$('#body').val();
     $.ajax({
          url:"{{ route('edit')}}",
          headers: {'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')},
          type:"POST",
          dataType:"json",
          data:{
              postId:postID,
              body:body,
          },
          success:function(response){
              console.info(response);
          },
          error:function(err){

          }
     });
});

Другие вопросы по теме