Внутренняя ошибка сервера 500 Laravel 5.4 AJAX - PullRequest
0 голосов
/ 11 декабря 2018

Я использую 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.log(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, поэтому я знаю, что он приходит с сервера

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

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

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

в вашем маршрутах / 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);
  }
}

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

<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.log(response);
          },
          error:function(err){

          }
     });
});
0 голосов
/ 11 декабря 2018

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

Profession::where...

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...