powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
13 сообщений из 13, страница 1 из 1
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822096
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax

Подскажите плс…

Задача такая: есть форма, под ней комменты, которые с этой формы и вводятся.
Есть сервер php+smarty.
Хочу попробовать сделать асинхронное обновление комментов.

По какому-либо событию, я делаю через аякс запрос к серверу и получаю комменты в виде html.
Ловлю это на клиенте и вставляю на страницу готовый хтмл.
Передачу хочу сделать через json, т.е. на сервере это json_encode, на стороне клиента JSON.parse.

Это нормальный вариант, или он не верный?

Я не считаю, что это окончательное решение, но пока мне бы хотелось это сделать именно так.

Т.е. больше, я это сделал, это работает без особых проблем, и всё бы ничего, но искал подтверждения своих действий в инете, и не нашёл никаких современных подтверждений, что так делают, соответственно и подумалось, может быть я не прав и это не верное решение?
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822097
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подкупает, что смарти формирует готовый хтмл на основе готовой используемой формы.
В результате код получается очень простым и главное, что не надо ничего практически менять, что на текущем этапе мне важно. Но при этом появляется динамическое обновление страницы.

Но вот подёргался, и ничего не нашёл.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822100
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artushПо какому-либо событию, я делаю через аякс запрос к серверу и получаю комменты в виде html.
Ловлю это на клиенте и вставляю на страницу готовый хтмл.
Передачу хочу сделать через json, т.е. на сервере это json_encode, на стороне клиента JSON.parse.Я не понял, в наличии имеется вставка html, а переделать нужно в json? Если что, html и json это перпендикулярные форматы, и передавать html, утрамбованный в json, который потом нужно снова развернуть в html, это не то что плохая практика, а просто глупость.

artushТ.е. больше, я это сделалУже боюсь представить.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822101
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy

сделал, в смысле попробовал, это работает.

да, имеется html кусок, который я хочу вставлять в div на странице.

почему json, помимо самого html кода идёт ещё ряд данных, json мне удобен тем, что я передаю с сервера массив и получаю массив.

в одном поле сам html код, в других служебные поля.

а что значит перпендикулярные форматы?
json это формат хранения данных, хтмл отображения. если передавать не упакованных хтмл, то придётся ещё обрабатывать полученные данные, выделять оттуда нужные поля.

при запаковке размер несколько увеличивается, но на сервере стоит сжатие, так что это в конечном счёте на трафик не влияет.
с точки зрения "что было" "что будет", сейчас чтобы обновить страницу, нужно перегрузить её всю, а будет перегрузка только полученных комментариев. т.е. в этом смысле тоже трафик не увеличится.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822105
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проехали, количество слов на количестве смысла не отразилось.

чтобы сказать, как конкретно сделать лучше, нужно знать, как конкретно сделано сейчас. то есть код.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822124
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artushпри запаковке размер несколько увеличивается, но на сервере стоит сжатие, так что это в конечном счёте на трафик не влияет.Зато влияет на загрузку как серверного процессора, так и клиентского. Другими словами, получился ничем не обоснованный тормоз.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822437
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, код...

тут всё просто.

на сервере
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...........

	$res_mas = array();
	if ( $is_new_comments )
	{
		$html = get_comments();
		$res_mas[ 'html' ] = json_encode( $html );
	}
	$res_mas[ 'is_new_comments' ] = $is_new_comments;
	send( $res_mas );

...........



на клиенте что-то типа
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...........
	req.onreadystatechange = function() 
	{
		if ( req.readyState == 4 )
		{ 
			if( req.status == 200 ) 
			{				
				var mas = JSON.parse( req.responseText );
				if ( mas[ "is_new_comments" ] )
				{
					document.getElementById( 'div_comments_list' ).innerHTML = mas[ 'html' ];
				}
				...........
			}
		}
	}


...........



Кроме этих двух переменных (html и is_new_comments) передаётс ещё ряд переменных, которые также удобно передавать в массиве.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822468
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle Зато влияет на загрузку как серверного процессора, так и клиентского. Другими словами, получился ничем не обоснованный тормоз.
да, я понимаю. но прикинул: преобразование строки в json и обратно не затратная операция, интерпретаторы используют встроенную бинарную функцию, по сути кодировка это замена переносов строк и табуляций на \t и \n и экранирование других спец символов, раскодировка обратная операция. на странице 10 комментов, макс размер коммента 1 кб, пусть html разметка 10%, получается предельно 11 кб.
Т.е. эта нагрузка не большая.
Это по поводу нагрузки.

А вот допустим, если не json, как лучше передать данные клиенту?
Или передача готового html настолько порочна, что даже обсуждать не следует?
Если передавать только данные, а на клиенте вставлять их в шаблоны, это по нагрузке будет превышать декодировку json очень значительно. И на данный момент мне удобней сделать как я описал. Т.е. есть какие-либо НО в моём подходе, кроме повышенной нагрузки на запаковку и распаковку?
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822657
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artushКроме этих двух переменных (html и is_new_comments) передаётс ещё ряд переменных, которые также удобно передавать в массиве.Не фонтан, но для простого проекта пойдет.

artushИли передача готового html настолько порочна, что даже обсуждать не следует?Абсолютно не порочна, что передавать зависит от архитектуры. Тем более, что ты и так передаешь html, хоть он и закодирован в json. Смысл противостояния html/json в том, чтобы не передавать html вообще, а только какие-то значения, на основании которых скриптом строится html.

Например, в одностраничном личном кабинете при загрузке форм я отдаю их в виде html, а при сохранении форм отправляю и возвращаю json. Просто мне набросать форму в html и подставить на сервере значения проще, чем городить скрипты на клиенте. На клиенте получается просто как пареная репа:

Меню с формами:
Код: html
1.
2.
3.
4.
5.
6.
            <ul>
              <li><a href="#" T="ORGINFO">Контактные данные</a></li>
              <li><a href="#" T="ORGDESCR">Описание деятельности</a></li>
              <li><a href="#" T="ORGREKV">Реквизиты</a></li>
              <li><a href="#" T="ORGLOGO">Логотип</a></li>
            </ul>



Загрузка форм:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
    $(".cabinet th li a").click(function () {
        $.ajax({
            url: "Cabinet.ashx?T=" + $(this).attr("T"),
            success: function (data) { $(".cabinet td").html(data);},
            error: function (xhr, status, err) {$(".cabinet td").html("<p class='error'>Ошибка<pre>" + xhr.responseText + "</pre></p>");}
        });
        return false;
    });


Сохранение форм:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
//поиск формы, которой принадлежит элемент
function findCabDomForm(el: HTMLElement) {
    if (!el) return;
    if (el.tagName == "FORM") return el; else return findCabDomForm(el.parentElement);
}

//получение значений полей формы
function collectForm(el: HTMLElement):any {
    var obj = {};
    $("*[name]", findCabDomForm(el)).each(function () {obj[this.name]=$(this).val()});
    return obj;
}

//обработка ответа сервера
function respond(elm, ret: CabResponse) {
    if (ret.IsError) {
        $(".cabinet td").html("<p class='error'>Ошибка<pre>" + ret.Message + "</pre></p>");
    } else {
        $(".cabinet td").html("<h2>Данные сохранены успешно</h2>");
    }
}

//отправка запроса - сохранение данных
function CabSaveOrgInfo(elm) {
    var org: Organization.tblOrganization = collectForm(elm);
    Organization.CabSaveInfo.run(org, function (ret: CabResponse) {
        respond(elm, ret);
    })
}

//отправка запроса - сохранение реквизитов
function CabSaveOrgRekv(elm) {
    var org: Organization.tblOrganization = collectForm(elm);
    Organization.CabSaveRekv.run(org, function (ret: CabResponse) {
        respond(elm, ret);
    })
}



Содержимое функций типа Organization.CabSaveInfo.run я вручную не пишу, оно генерируется заранее.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822765
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем делать стоко лишних преобразований?есть сформированный кусак html кода - передал его клиенту
на клиенте простыми командами jquery вставил в нужное место.

http://jquery.page2page.ru/index.php5/Добавление_содержимого_в_конец_элементов

Т.е. больше, я это сделал, это работает без особых проблем, и всё бы ничего, но искал подтверждения своих действий в инете, и не нашёл никаких современных подтверждений, что так делают, соответственно и подумалось, может быть я не прав и это не верное решение?
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38822769
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем делать стоко лишних преобразований?есть сформированный кусак html кода - передал его клиенту
на клиенте простыми командами jquery вставил в нужное место.

http://jquery.page2page.ru/index.php5/Добавление_содержимого_в_конец_элементов

авторТ.е. больше, я это сделал, это работает без особых проблем, и всё бы ничего, но искал подтверждения своих действий в инете, и не нашёл никаких современных подтверждений, что так делают, соответственно и подумалось, может быть я не прав и это не верное решение?
ну если ты искал в инете то счас уже не ajax для этих целей используют, а websocket. и всё ннамного проще становится.
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38824334
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, спасибо за подробный ответ!
...
Рейтинг: 0 / 0
Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
    #38824336
artush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

ну ээээ) скорее всего так и есть. у меня ситуация немного нестандартная. с веб программированием столкнулся пару месяцев назад, и пока просто осваиваюсь потихоньку, поэтому хочу просто с джаваскриптом в чистом виде разобраться.
сейчас занят совсем другим, реструктуризацией бд на сервере, до остального руки доходят походу изучения js, отсюда и задача возникла, изменить всё с минимальными затратами и полным пониманием процесса. спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Передача фрагментов HTML на страницу с помощью php, smart, json и ajax
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]