@vincent_gun

Как добавить html в html с помощью Ajax?

Доброго времени!

Ввиду неопытности не знаю как реализовать следующий функционал.
С сервера на клиент возвращаю JSON-массив объектов, ловлю его Ajax'ом: .done(result).
Объекты массива необходимо динамически выводить на страницу, предварительно вставив значения в html-теги. Шаблонного кода получается на 60 строк, а вставить надо всего папу значений. Не вижу смысла прописывать весь шаблон в JS-коде, думаю вынести его в отдельную html-страницу (проще для редизайна, чище, меньше JS-кода). Дальше возникают сложности:

Как эту страницу вытащить, вставить в неё значения объекта (видимо, по id элемента {тэга}), и полученный результат целиком вставить в основную страницу? В теории всё понятно, проблема в реализации.

UPD:

Перечитал вопрос, как обезьяной написано. Чтобы было проще для понимания: с сервера возвращается массив с билетами на рейс, билеты отображаются отдельно друг от друга списком, каждый со своей информацией и вложениями. Билет в данном случае - шаблон. Так вот этот шаблон и надо вынести в отдельный файл, ajax'ом вытаскивать его, вставлять значения и загружать на страницу.

Спасибо за внимание.
  • Вопрос задан
  • 768 просмотров
Пригласить эксперта
Ответы на вопрос 3
alex_keysi
@alex_keysi
Помог с решением? Отметь “правильный ответ”
Вот тут хороший пример есть
https://developer.mozilla.org/ru/docs/Web/HTML/Ele...
Используй тесмплейт тег. Пихани его в html и потом по id вытаскивай
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
<template id="ticket">
  <div class="ticket">blabla</div>
</template>


Получай на js содержимое шаблона текстом, вставляй нужные значения в метки, добавляй полученный код в нужный блок. Либо получи содержимое в виде dom узла, сделай его копию, вставь в нужные места значения и добавь в нужный блок.
Ответ написан
Комментировать
BRAGA96
@BRAGA96
Для таких задач идеально подходят js фреймворки, например vue, angular, react.
Если хочется свой велосипед, то как-то так:

JSON шаблон
[
    {
        "title": "About my company",
        "text": "Lorem ipusm ..."
    }
]


HTML Шаблон
<div class="about">
    <h2>{{title}}</h2>
    <p>{{text}}</p>
</div>


JavaScript
(function ($) {
    'use strict';

    JSONTemplate(
        'https://example.com/api/about.json',
        'https://example.com/templates/about.html'
    ).then(function (html) {
        $('body').append(html);
    });

    function JSONTemplate(jsonLink, htmlLink) {
        return promise(function (resolve, reject) {
            $.when(
                ajax(jsonLink, {
                    dataType: 'json'
                }),
                ajax(htmlLink, {
                    dataType: 'text'
                })
            ).done(function (json, html) {
                var $html = '';
                json.forEach(function (item) {
                    $html += tag(html, item);
                });
                return resolve($html);
            }).fail(reject);
        });
    }

    function ajax(link, setup) {
        return $.ajax($.extend(true, {}, {
            method: 'GET'
        }, setup || {}, {
            url: link
        }));
    }

    function tag(input, data) {
        for (var tag in data) {
            input = input.replace(new RegExp('\{\{' + tag + '\}\}', 'g'), data[tag]);
        }
        return input;
    }

    function promise(callback) {
        var deferred = $.Deferred();
        callback && callback(deferred.resolve, deferred.reject);
        return deferred;
    }
}(jQuery));


Результат
<body>
    <div class="about">
        <h2>About my company</h2>
        <p>Lorem ipusm ...</p>
    </div>
</body>


Вот вам полный пример с маленьким шаблонизатором, чтобы можно было использовать теги в шаблонах, например:
<div class="item">
    <h2>{{title}}</h2>
    <div>{{price}} <span v-show="discount">{{discount}}</span></div>
    <button>{{button}}</button>
</div>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 11:54
50000 руб./за проект
23 нояб. 2024, в 07:32
75000 руб./за проект
28 нояб. 2024, в 11:38
5000 руб./за проект