LAravel 5.4: Ответ от контроллера к блейду от Ajax (laravel, json_encode () ожидает, что параметр 2 будет целочисленным, объект задан) - PullRequest
1 голос
/ 08 марта 2019

Я хочу ответить на данные из контроллера в AJAX как массив, но он продолжает показывать эту ошибку:

json_encode () ожидает, что параметр 2 будет целым числом, объект задан

следующий мой код:

 function get_show(Request $request)
    {
        $id = $request->input('id');
        $leads = Lead::find($id);

        $leads_attendances = DB::table('event_attendances')
            ->leftJoin('leads', 'leads.id', '=', 'event_attendances.lead_id')
            ->leftJoin('groups', 'groups.id', '=', 'event_attendances.group_id')
            ->select('groups.name as event_name', 'leads.name as name', 'leads.company_name', 'event_attendances.attend as attend_status')
            ->where('event_attendances.lead_id', '=', $id)
            ->get()->toArray();

        $output = array(
            'id' => $id,
            'country' => $leads->country,
            'company_name' => $leads->company_name,
            'lead_stage' => $leads->lead_stage
        );

        echo json_encode($output,$leads_attendances);
    }

Это мой код AJAX:

$.ajax({
                    url: "{{route('main.get_show')}}",
                    method: 'get',
                    data: {id: id},
                    dataType: 'json',
                    success: function (response) {

                        console.log(response);
                        $('#model2').modal('show');

                        document.getElementById('leads').innerHTML += response.output.company_name;
                        document.getElementById('leads').innerHTML += response.leads_attendances;

Новая ошибка:

приводит: 7515 Uncaught ReferenceError: ведет_средства не определены в Object.success (ведет: 7515) в i (jquery.min.js: 2) в Object.fireWith [as resolWith] (jquery.min.js: 2) в z (jquery.min.js: 4) на XMLHttpRequest. (jquery.min.js: 4) * * 1016

Выходной отклик инспекта:

{ "выход": { "ID": "25", "страна": "", "company_name": "comp1", "lead_stage": "под"}, "leads_attendances": [{ "EVENT_NAME" : "event1", "имя": "LEMUN", "company_name": "comp1", "attend_status": "Да"}, { "event_name": "event2", "имя": "ZDMJ", "company_name" : "comp1", "attend_status": "Да"}, { "event_name": "event3", "имя": "MNAl", "company_name": "comp1", "attend_status": "Да"}, {» event_name ":" событие " "имя": "Khalai", "company_name": "comp1", "attend_status": "Да"}, { "event_name":" event4 », "Имя": "Замель", "company_name": "COMP1", "attend_status": "Да"}]}

Сборка таблицы в JS:

success: function (response) {


                        console.log(response);
                        $('#myModaleee').modal('show');


                        var leads_attendances=response.leads_attendances;
                        document.getElementById('lead_details').innerHTML += '<table>';

                        for(var i=0;i<leads_attendances.length;i++){
                            var event_name=leads_attendances[i].event_name;
                            var name=leads_attendances[i].name;
                            var company_name= leads_attendances[i].company_name;
                            var attend_status= leads_attendances[i].attend_status;
                            document.getElementById('lead_details').innerHTML += '<tr>'+
                                '<td>'+event_name+'</td>'+
                                '<td>'+name+'</td>'+
                                '<td>'+company_name+'</td>'+
                                '<td>'+attend_status+'</td>'
                                +'</tr>';
                        }
                        document.getElementById('lead_details').innerHTML += '</table>';


                    }

Первый массив ($ output) прошел и хорошо работает с Ajax, но во второй коллекции эта ошибка показана. Мне все еще нужно передать больше, чем эти коллекции, какая-нибудь помощь, как передать это и заставить его работать с Ajax?

Спасибо

Ответы [ 2 ]

1 голос
/ 08 марта 2019

в вашем контроллере возвращает Json Response, как показано ниже:

return response () -> json ($ response, 200);

function get_show(Request $request)
{
        $id = $request->input('id');
        $leads = Lead::find($id);

        $leads_attendances = DB::table('event_attendances')
            ->leftJoin('leads', 'leads.id', '=', 'event_attendances.lead_id')
            ->leftJoin('groups', 'groups.id', '=', 'event_attendances.group_id')
            ->select('groups.name as event_name', 'leads.name as name', 'leads.company_name', 'event_attendances.attend as attend_status')
            ->where('event_attendances.lead_id', '=', $id)
            ->get()->toArray();

        $output = array(
            'id' => $id,
            'country' => $leads->country,
            'company_name' => $leads->company_name,
            'lead_stage' => $leads->lead_stage
        );

        $response=array('output'=>$output,'leads_attendances'=>$leads_attendances);
        return response()->json($response,200);
}

предположим, что у вас естьтаблица div:

<table>
  <thead>
     <tr>
        <th> event_name </th>
        <th> name </th>
        <th> company_name </th>
        <th> attend_status </th>
     </tr>
  </thead>
  <tbody id="tbody"></tbody>
</table>

ваша функция ajax должна быть:

$.ajax({
   url:'/url here',
   method:'GET',
   dataType:'json',
   success:function(response){
     console.log(response);
     var id = response.output.id;
     var country= response.output.country;
     var company_name=response.output.company_name;
     var lead_stage =response.output.lead_stage;
     var leads_attendances=response.leads_attendances;
     var trHTML="";
     for(var i=0;i<leads_attendances.length;i++){
        var event_name=leads_attendances[i].event_name;
        var name=leads_attendances[i].name;
        var company_name= leads_attendances[i].company_name;
        var attend_status= leads_attendances[i].attend_status;
        let trRow="<tr>"+
                  "<td>"+event_name+"</td>"+
                  "<td>"+name+"</td>"+
                  "<td>"+company_name+"</td>"+
                  "<td>"+attend_status+"</td>"
                  +"</tr>";
       trHTML=trHTML+trRow;
     }
     $('#tbody').empty();
     $('#tbody').append(trHTML);

   },
   error:function(err){
      console.log(err);
   }
});
1 голос
/ 08 марта 2019

Вы не можете использовать это echo json_encode($output,$leads_attendances);

Попробуйте это

$data = ['output' => $output, 'leads_attendances' => $leads_attendances];

return response()->json(['results'=> $data]);
or
return response()->json($data);

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