JSON возвращает неопределенное.(сделано через контроллер Laravel) - PullRequest
0 голосов
/ 14 октября 2018

привет У меня есть массив json, когда я выполняю $('tbody').html(data.table_data);
в моем ajax, я получаю следующее возвращение

[{"id":28,"fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":29,"fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"}][{"id":28,"fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":29,"fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"}]

и с data.total_data я получаю число из всех всех записей, которые яhave

ok Итак, когда я пытаюсь вывести эти данные * id: 28, fname: tester и т. д., я получаю неопределенное значение.

код следующий.

   function fetch_customer_data(query = '')
    {
        $.ajax({
            url:"{{ route('index.action') }}",
            method:'GET',
            data:{query:query},
            dataType:'json',
            success:function(data)
            {
                var client_data = '';
                $.each(data,function (key,value) {
                    client_data += '<tr>';
                    client_data += '<td>' +value.id +'</td>';
                    client_data += '<td>' +value.fname+'</td>';
                    client_data += '<td>' +value.lname+'</td>';
                    client_data += '<td>' +value.email+'</td>';
                    client_data += '<td>' +value.phone+'</td>';
                    client_data += '<td>' +value.address+'</td>';
                    client_data += '<td>' +value.country+'</td>';
                    client_data += '<td>' +value.city+'</td>';
                    client_data += '<td>' +value.bday+'</td>';
                    client_data += '<td>' +value.username+'</td>';
                    client_data += '</tr>';
                })


                  $('tbody').html(cleint_data);

                $('#total_records').text(data.total_data);

            }
        })
    }

Редактировать: Я не знаю, как предоставить вам реальный ответ, поэтому я сделаю следующее лучшее.Я покажу вам, как я это генерирую.может быть, в этом моя проблема

function action(Request $request)
{
    if ($request->ajax()) {
        $output = '';
        $query = $request->get('query');
        if ($query != '') {
            $data = DB::table('users')->
            where('fname', 'like', '%' . $query . '%')
                ->orWhere('lname', 'like', '%' . $query . '%')
                ->orWhere('email', 'like', '%' . $query . '%')
                ->orWhere('phone', 'like', '%' . $query . '%')
                ->orWhere('address', 'like', '%' . $query . '%')
                ->orWhere('country', 'like', '%' . $query . '%')
                ->orWhere('city', 'like', '%' . $query . '%')
                ->orWhere('bday', 'like', '%' . $query . '%')
                ->orWhere('username', 'like', '%' . $query . '%')
                ->orWhere('access', 'like', '%' . $query . '%')
                ->orderBy('id', 'desc')
                ->get();
        } else {
            $data = DB::table('users')
                ->orderBy('id', 'asc')
                ->get();
        }
        $total_row = $data->count();
        if ($total_row > 0) {
            foreach ($data as $row) {
                $output .= $data;
            }
        } else {
            $output = '
   <tr>
    <td align="center" colspan="13">No Data Found</td>
   </tr>
   ';
        }
        $datas = array(
            'table_data' => $output,
            'total_data' => $total_row
        );

        echo json_encode($datas);
    }
}

edit Вот вывод json

 {table_data: "[{"id":28,"fname":"tester","lname":"testlast","pho…14 09:16:50","updated_at":"2018-10-14 12:51:26"}]", total_data: 2}
table_data: "[{"id":28,"fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":29,"fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"}][{"id":28,"fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":29,"fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"}]"
total_data: 2

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

хорошо, поэтому я хотел бы в первую очередь поблагодарить SilentCode за помощь без вас. Я бы никогда не понял, что моя строка Json неверна, сайт, которым вы поделились http://json2csharp.com/, показал мне, где ошибкав моей строке было.поэтому я понял, что ошибка при создании была внутри моего контроллера.

 if ($total_row > 0) {
                 foreach ($data as $row) {
                $output .= $data;
            } 

Прямо здесь $output .= $data; с DOT EQUALS каждый раз, когда строка проходит по каждой строке, она будет добавлять одну и ту же строку снова и снова.(поэтому, если бы у меня было 100 записей, строка, вероятно, была бы огромной)

, чтобы решить эту проблему, все, что мне нужно было сделать, это удалить цикл foreach (его не нужно, я имел его там, когда Iw генерировал html внутримой контроллер "не делает это плохо, как мне сказали"), а также заменяет .= на =

 if ($total_row > 0) {

                $output = $data;
            }

и, на мой взгляд, я просто сохранил старый формат, который я только что изменил $.each(data,function...на $.each(data.table_data,function... и все стало работать нормально

              var client_data = '';
              console.log(data);
                $.each(data.table_data,function (key,value) {
                    client_data += '<tr>';
                    client_data += '<td>' + value.id +'</td>';
                    client_data += '<td>' +value.fname+'</td>';
                    client_data += '<td>' +value.lname+'</td>';
                    client_data += '<td>' +value.email+'</td>';
                    client_data += '<td>' +value.phone+'</td>';
                    client_data += '<td>' +value.address+'</td>';
                    client_data += '<td>' +value.country+'</td>';
                    client_data += '<td>' +value.city+'</td>';
                    client_data += '<td>' +value.bday+'</td>';
                    client_data += '<td>' +value.username+'</td>';
                    client_data += '<td>' +value.access+'</td>' ;

                    client_data += '<td> <a href ="users/' + value.id +'/edit" class="btn btn-outline-primary"> Edit </a> </td>' ;
                })


             $('tbody').html(client_data);

В заключение мой Json повторялся для каждой записи в моей БД и пытался извлечь из неправильной части моего объекта (данных) вместо (data.data_table)

0 голосов
/ 14 октября 2018

По моим наблюдениям у вас есть две ошибки: 1) Ваш результат Json не отформатирован должным образом.2) Вы добавляете $('tbody').html(cleint_data);, там вы ошиблись словом client_data

$(document).ready(function(){
// Your json result has an error, So I corrected it and got the output. It has some unrecognized square brackets in the middle with one missing comma. check again
var yourData = jQuery.parseJSON('[{"id":"28","fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":"29","fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"},{"id":"28","fname":"tester","lname":"testlast","phone":"00000000","email":"test@email.com","address":"Tester 10","country":"TesterCountry","city":"TesterTown","bday":"2222-02-22","username":"admin","password":"1234","access":"Admin","created_at":"2018-10-13 16:34:22","updated_at":"2018-10-14 12:50:26"},{"id":"29","fname":"tester2","lname":"tester2last","phone":"11000000","email":"email2@test2.com","address":"Testaria 22","country":"TEsterio","city":"Testeriontiown","bday":"8812-09-08","username":"admin","password":"1234","access":"admin","created_at":"2018-10-14 09:16:50","updated_at":"2018-10-14 12:51:26"}]');

var client_data = '';
                $.each(yourData,function (key,value) {
                    client_data += '<tr>';
                    client_data += '<td>' +value.id +'</td>';
                    client_data += '<td>' +value.fname+'</td>';
                    client_data += '<td>' +value.lname+'</td>';
                    client_data += '<td>' +value.email+'</td>';
                    client_data += '<td>' +value.phone+'</td>';
                    client_data += '<td>' +value.address+'</td>';
                    client_data += '<td>' +value.country+'</td>';
                    client_data += '<td>' +value.city+'</td>';
                    client_data += '<td>' +value.bday+'</td>';
                    client_data += '<td>' +value.username+'</td>';
                    client_data += '</tr>';
                })


                  $('tbody').html(client_data);

             //   $('#total_records').text(data.total_data);


});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table>
<tbody>
</tbody>
</table>
...