Laravel - Как извлечь значение из JSON в текстовое поле - PullRequest
0 голосов
/ 03 марта 2020

В моем Laravel -5.8 я передал данные с контроллера для просмотра, используя JSON.

public function findScore(Request $request)
{
    $userCompany = Auth::user()->company_id;
    $child  = DB::table('appraisal_goal_types')->where('company_id', $userCompany)->where('id',$request->id)->first();
   if(empty($child))
   {
       abort(404);
   }  
   $maxscore2 = 1;
    $maxscore = DB::table('appraisal_goal_types')->select('max_score')->find($child->parent_id);
    return response()->json([
        'maxscore' => $maxscore,
        'maxscore2' => $maxscore2
    ]);        
}

Маршрут

Route::get('get/findScore','Appraisal\AppraisalGoalsController@findScore')
    ->name('get.scores.all');

Вид

<form  action="{{route('appraisal.appraisal_goals.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
 {{csrf_field()}}

 <div class="card-body">
 <div class="form-body">
 <div class="row">

  <div class="col-12 col-sm-6">
    <div class="form-group">
      <label class="control-label"> Goal Type:<span style="color:red;">*</span></label>
      <select id="goal_type" class="form-control" name="goal_type_id">
        <option value="">Select Goal Type</option>

        @foreach ($categories as $category)
        @unless($category->name === 'Job Fundamentals')
          <option hidden value="{{ $category->id }}" {{ $category->id == old('category_id') ? 'selected' : '' }}>{{ $category->name }}</option>

          @if ($category->children)
            @foreach ($category->children as $child)
            @unless($child->name === 'Job Fundamentals')
              <option value="{{ $child->id }}" {{ $child->id == old('category_id') ? 'selected' : '' }}>&nbsp;&nbsp;{{ $child->name }}</option>
            @endunless
            @endforeach
          @endif
          @endunless
        @endforeach
      </select>
    </div>
  </div>    

    <input type="text" id="max_score" value="max_score" class="form-control" >

    </form>

    <script type="text/javascript">
    $(document).ready(function() {
        $(document).on('change', '#goal_type', function() {
            var air_id =  $(this).val();

            var a = $(this).parent();

            console.log("Its Change !");

            var op = "";


            $.ajax({
                type: 'get',
                url: '{{ route('get.scores.all') }}',
                data: { 'id': air_id },
                dataType: 'json',      //return data will be json
                success: function(data) {
                    console.log(data.maxscore);
                    console.log(data.maxscore2);
                     $('#max_score').val(data.maxscore);
                },
                error:function(){

                }
            });
        });
    });
    </script>

Когда я нажимаю на раскрывающемся списке изменений, я получаю:

Консоль:

console diagram

текстовое поле:

testbox diagram

Мне нужно, чтобы прямое значение отображалось в тексте, а не объект JSON, как показано на диаграмма Например, в текстовом поле только 75.

Как мне решить эту проблему?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

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

var selectedValue = max_score.options[max_score.selectedIndex].innerHTML;
var arreglo = selectedValue.split(' ');
var arreglo1 = arreglo[0];
0 голосов
/ 03 марта 2020

Вы видите этот результат, потому что maxscore является объектом. Вы можете либо ссылаться на maxscore.max_score из JavaScript при добавлении к элементу, либо вы можете посмотреть на свой красноречивый код. Скорее всего, вы можете заменить ->find() звонками на ->where() и ->first(), как вы сделали с $child

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