Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка ответа $.post запроса - как в блоке div получить переменную массива (https://javascript.ru/forum/jquery/63110-obrabotka-otveta-%24-post-zaprosa-kak-v-bloke-div-poluchit-peremennuyu-massiva.html)

Dilettante_Pro 18.05.2016 15:51

NeilDaniels,
Цитата:

Сообщение от NeilDaniels
Как там принять полученные значения??????????? Вот ни разу не видел примера, где принятые данные разбираются именно в #receiv.

В #receiv данные и не разбираются - туда размещаются разобранные данные
А разбираются они в
Цитата:

Сообщение от laimas
1 $.post('transmission.php', {'id' : id}, function(data){
2    if(data) $("#receiv").text(data); //$("#receiv").text(data); так конечно нельзя, подразумевается, что будет сформирован  html из массива, и он будет вставляться
3    else //иначе произошла ошибка
4 }, 'json');

в строчках между первой и последней

NeilDaniels 18.05.2016 15:52

laimas,
1. ### Функция transmission.php, которая по полученному id делает выборку в таблице БД, и формирует набор данных из этого же id и данных из строки таблицы, и возвращает на клиент. Вообще-то об этом выше написал.
2. Полученные от transmission.php данные должны быть приняты в блоке #receiv, он же блок модального окна, данные рассовываются по полям input (это окно для редактирования строки таблицы БД).

Что ещё непонятного????????????????????????

NeilDaniels 18.05.2016 15:54

Dilettante_Pro,
а как из этого
Цитата:

1 $.post('transmission.php', {'id' : id}, function(data){
2 if(data) $("#receiv").text(data); //$("#receiv").text(data); так конечно нельзя, подразумевается, что будет сформирован html из массива, и он будет вставляться
3 else //иначе произошла ошибка
4 }, 'json');
данные передать в #receiv? Они же за пределами скрипта уже не видны.

laimas 18.05.2016 16:06

Цитата:

Сообщение от NeilDaniels
Функция transmission.php

transmission.php - это не функция, а файл серверного скрипта, к которому будет обращаться клиент, а вот в нем уже могут быть или не быть функции.

Вы написали три строки из этого файла и пойми попробуй чего там в нем делается. Могу только заметить, что вызывать функцию (пусть в этом файле она вызывается), в которой проверяется вот это:

if (isset($_POST['id']))

это мягко говоря не прилично, логичнее вызывать функцию, если таковое установлено.

Я не маг, я не могу догадаться как и что вы делаете, что вам конкретно надо, я могу лишь написать тезисно. Есть два способа отдать клиенту:

1) Формируем из данных полученных из базы например, таблицу обрамленную формой, которая содержит ее поля. Этот код отдаем клиенту, который вставляет его как HTML в нужное место.

2) Кодируем в JSON данные из базы и отдаем их клиенту. Клиент из полученного массива/объекта (о разнице читайте выше) формирует html код таблицы обрамленной формой с ее полями и вставляет в нужное место.

Что ещё непонятного????????????????????????

Я что должен перед вами распинаться? Либо вы конкретно поясняете что отдаете клиенту и показываете эти данные, описываете что хотите получить, либо думайте сами. Я ведь тоже не собираюсь ликбезом заниматься.

NeilDaniels 18.05.2016 16:13

Цитата:

Сообщение от laimas (Сообщение 416902)
transmission.php - это не функция, а файл серверного скрипта, к которому будет обращаться клиент, а вот в нем уже могут быть или не быть функции.

Вы написали три строки из этого файла и пойми попробуй чего там в нем делается. Могу только заметить, что вызывать функцию (пусть в этом файле она вызывается), в которой проверяется вот это:

if (isset($_POST['id']))

это мягко говоря не прилично, логичнее вызывать функцию, если таковое установлено.

1) Формируем из данных полученных из базы например, таблицу обрамленную формой, которая содержит ее поля. Этот код отдаем клиенту, который вставляет его как HTML в нужное место.

2) Кодируем в JSON данные из базы и отдаем их клиенту. Клиент из полученного массива/объекта (о разнице читайте выше) формирует html код таблицы обрамленной формой с ее полями и вставляет в нужное место.

1. Что в этом неприличного? Из-за недейственности или того, что так просто непринято кодить?

2. Почему именно так? Если, скажем, несколько разных таблиц (разное количество столбцов и т.д.), то что, для каждого вида таблицы писать свой серверный обработчик - построитель таблицы?

NeilDaniels 18.05.2016 16:15

В общем, всем спасибо, тему можно даже удалить, ибо к общему согласию по моей тупости не придём.

laimas 18.05.2016 16:43

Цитата:

Сообщение от NeilDaniels
Что в этом неприличного? Из-за недейственности или того, что так просто непринято кодить?

Пишется вообще-то так
if(isset($_POST['name']) && (int)$_POST['name']) {
    //выполняем код
}


ибо если вам прислали туфту левую, то зачем же попусту делать запрос к базе, явно зная, что он ничего не вернет? Причем isset($_POST['name']) можно и опустить, если блокировать вывод предупреждений и понимать суть происходящего.

Цитата:

Сообщение от NeilDaniels
Почему именно так?

Потому, что случай 2), это возврат клиенту на его запрос "сырых данных", массива, из которого клиент сам построит необходимый html-код, а массив данных нельзя передавать по HTTP как он есть, поэтому и JSON, хотя есть и другие форматы. А если вас это не устраивает, то стройте его на сервере и отдавайте клиенту готовое. Но не я же задавал вопрос о массиве, а вы.


Цитата:

Сообщение от NeilDaniels
Если, скажем, несколько разных таблиц (разное количество столбцов и т.д.), то что, для каждого вида таблицы писать свой серверный обработчик - построитель таблицы?


Не обязательно, все зависит и от структуры таблиц, и если они различны, то запросы конечно будут свои, как и формы их обслуживающие. Но данные задачи можно автоматизировать на сколько это можно. А вот к какой таблице серверу обратиться, какие данные вернуть или какую уже готовую форму, сервер понимает по параметрам запроса клиента, под ожидаемые параметры и пишутся серверные скрипты обработчики.

Dilettante_Pro 18.05.2016 17:03

Цитата:

Сообщение от NeilDaniels (Сообщение 416899)
Dilettante_Pro,
а как из этого

данные передать в #receiv? Они же за пределами скрипта уже не видны.

$("#receiv").text(data); - это и есть размещение присланных данных data в #receiv, только без всякой обработки, в лоб.
Если бы пришел HTML - все легло бы идеально.
Перед размещением здесь же можно сделать любую обработку данных
http://javascript.ru/blog/gordon-fre...jax-javascript
http://professorweb.ru/my/javascript...level3/3_4.php

NeilDaniels 18.05.2016 17:11

Цитата:

Сообщение от laimas
Пишется вообще-то так
if(isset($_POST['name']) && (int)$_POST['name']) {
//выполняем код
}


ибо если вам прислали туфту левую, то зачем же попусту делать запрос к базе, явно зная, что он ничего не вернет?

Если только делать дополнительную проверку на случай того, что в id вдруг будет не целое число (хотя передаётся именно только число, и целое)?

Цитата:

Сообщение от laimas
Потому, что случай 2), это возврат клиенту на его запрос "сырых данных", массива, из которого клиент сам построит необходимый html-код, а массив данных нельзя передавать по HTTP как он есть, поэтому и JSON, хотя есть и другие форматы. А если вас это не устраивает, то стройте его на сервере и отдавайте клиенту готовое. Но не я же задавал вопрос о массиве, а вы.

Ну приму не массив как он есть, а данные в формате JSON. Как набор данных в формате JSON разобрать в блоке #receive на стороне клиента? Если данные на стороне клиента доступны только в скрипте, вызвавшем функцию на стороне сервера. Или это не так?

Насчёт запроса и форм согласен, не сообразил сразу - на таблицу с данными на стороне клиента своя таблица в БД, и запрос-то будет отличаться. Но сформировать таблицу серверным скриптом, передать её до клиента, где JS (?) формирует эту же таблицу, - а не закапризничает ли функционал вывода модального окна, где должна быть таблица (+ кнопка, по нажатию на которую пойдёт запрос на обновление строки в таблице БД)? Не проще ли на клиенте принять данные и сформировать в таблицу в модальном окне?

NeilDaniels 18.05.2016 17:16

Цитата:

Сообщение от Dilettante_Pro (Сообщение 416909)
$("#receiv").text(data); - это и есть размещение присланных данных data в #receiv, только без всякой обработки, в лоб.
Если бы пришел HTML - все легло бы идеально.
Перед размещением здесь же можно сделать любую обработку данных
http://javascript.ru/blog/gordon-fre...jax-javascript

Опять 25. Поправлю .text(data) на .html(data), и что далее?
Как в div'е ловить принятые данные? Мне нахер (извиняюсь за французский) принятые данные не нужны в скрипте-функции вызова серверного скрипта с передачей данных, мне они нужны в блоке div, который лежит за пределами JS функции. Сколько раз это нужно повторить, чтобы дошло?
И как принять данные в блоке div #receiv, я так нигде и не нашёл.


Часовой пояс GMT +3, время: 09:42.