Преобразование данных json в HTML с помощью цикла div

У меня есть следующий результат, и я хотел отобразить цикл html div из результата. Но все попытки провалились.

<?php   
$location = $_GET['location'];
$checkin = $_GET['check_in'];
$checkout= $_GET['check_out'];
$adult= $_GET['adult'];
$child= $_GET['child'];
$handle = curl_init();
$url = "https://api.sandbox.amadeus.com/v1.2/hotels/search-airport?apikey=Gaois6WPa9VQ7WhxqqfV2XsD7J5gMMHX&location=$location&check_in=$checkin&check_out=$checkout&amenity=RESTAURANT&amenity=RESTAURANT&number_of_results=2";


curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($handle); 
curl_close($handle);       
echo $output;
?>

<script>
var data = $output;
for(var i = 0, len = data.length; i < length; i++) {
var temp = '<tr><td>' + data[i].id + '</td>';
temp+= '<td>' + data[i].property_code+ '</td>';
temp+= '<td>' + data[i].property_name+ '</td>';
temp+= '<td>' + data[i].location+ '</td></tr>';
$('table tbody').append(temp));
}
</script>

Он предоставляет массив, но не может создать html-таблицу с соответствующими данными.

Почему вы смешали javascript и php?

Sfili_81 23.10.2018 08:58

Извините, я ошибся, поместив строки кода, разместил правильную разметку

Pet 23.10.2018 09:01
var data = $output; вы забыли повторить его, плюс теги конечно
Kevin 23.10.2018 09:40
Стоит ли изучать 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 и хотите разрабатывать...
2
3
119
1

Ответы 1

Исходя из того, что вы, как вы указали в вопросе, фактически возвращаете действительные данные json из amadeus api, возможно, может быть интересно следующее. Вместо того, чтобы использовать конкатенацию строк, ниже используются обычные методы манипулирования DOM, что, по-моему, является лучшим подходом.

Как было указано в первом комментарии - зачем так смешивать PHP и javascript? Если запросы выполняются клиентом в ответ на выбор пользователем параметров в форме (например), и запрос запускается javascript / ajax, тогда я могу понять необходимость использования javascript для обработки ответа, но для статической страницы или обычная отправка формы, действительно нет необходимости использовать javascript.

Я получаю код с помощью функции PHP под названием curl, которая здесь не показана.

<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title>AMADEUS - JSON TO HTML</title>
        <style>
            table{width:100%;font-family:calibri,verdana,arial;display:table; border:1px solid black;background:whitesmoke;}
            th{background:gray;color:white;}
            tr{display:table-row;background:white;}
            tr:nth-of-type(odd){background:whitesmoke;}
            td{padding:0.5rem;margin:0.1rem;display:table-cell;border:1px dotted gray;}
        </style>
        <?php
            /* assign javascript variable with json data */
            echo "
        <script>
            let json=$output;
        </script>";
        ?>
    </head>
    <body>

        <table id='amadeus'>
            <!-- an empty table.. -->
        </table>


        <script>
            /* simple function to add a new table cell */
            const addcell=function(data,parent){
                let td=document.createElement('td');
                    td.innerText=data;
                parent.appendChild( td );
            };

            let tbl=document.getElementById( 'amadeus' );
            let results=json.results;
            let properties=['property_code','property_name','location'];
            console.info( results )

            let tr=document.createElement('tr');
                tbl.appendChild( tr );

            properties.forEach( function( prop ){
                let th=document.createElement('th');
                    th.setAttribute('scope','col');
                    th.innerText=prop;

                tr.appendChild( th );
            });


            results.forEach( function(obj){
                tr=document.createElement('tr');
                tbl.appendChild( tr );

                /* Alternative method to get data into cells */
                addcell( obj.property_code, tr );
                addcell( obj.property_name, tr );
                addcell( [obj.location.latitude, obj.location.longitude ].join(','), tr );


            });
        </script>
    </body>
</html>

измененный код, приведенный выше, теперь генерируется примерно так: example output

Круто, это работает как по волшебству, мне действительно нужно отточить свое фундаментальное понимание этого. очень признателен за ваши добрые усилия и руководство. Будьте здоровы

Pet 23.10.2018 13:17
halaltrekker.com/staging2/… Кстати, почему столбец адреса отображается как [объект Object]? Как мне получить доступ к этому массиву?
Pet 23.10.2018 13:29

var properties = ['property_code', 'property_name', 'location [] -> lat‌ itude']; Как мне узнать широту / долготу? Я пробовал указанный выше синтаксис, но безуспешно

Pet 23.10.2018 15:34

Вместо того, чтобы снова обрабатывать массив (properties) для добавления фактических данных, вы можете вручную добавить ячейку таблицы для каждого элемента - и таким образом вы можете получить доступ к location.latitude, location.longitude и т. д. Я просто использовал массив для удобства в примере.

Professor Abronsius 23.10.2018 15:58

Значит ли это так? let properties = ['property_code', 'property_name', 'location.latitu‌ de'];

Pet 23.10.2018 16:04

Я просто попробовал последние изменения, которые вы рекомендовали для объединения двух объектов. он работает очаровательно, и теперь я пытаюсь объединить сумму и символ валюты, следуя тому же методу :) Как мне сделать какой-то вклад лично вам, вы сэкономили много моего времени

Pet 23.10.2018 16:30

если бы я помог просто принять ответ и, возможно, проголосовать тоже - кроме этого больше ничего не требуется

Professor Abronsius 23.10.2018 16:44

Это очень любезно с твоей стороны, RamRaider, я желаю всего наилучшего в твоих будущих начинаниях и усилиях. Тем не менее, с нетерпением жду возможности получить от вас столько же знаний и рекомендаций в ближайшем будущем :)

Pet 23.10.2018 16:59

Как мне создать ссылку на контент? А также как сделать <img src>. Я пробовал следующий код, но безуспешно addcell ('<a href = "'+obj._links.more_rooms_at_this_hotel.href+'"> View </a> ‌', tr); он рекламирует "перед значением и" в конце

Pet 23.10.2018 18:14

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