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)

NeilDaniels 18.05.2016 14:30

Обработка ответа $.post запроса - как в блоке div получить переменную массива
 
По двойному клику на строке таблицы получаем значение id (номер по порядку) и возвращаем ответ в блок <div id="receiv"> </div>
<script>
$(function() {
	$(".rowlink").bind( 'dblclick', function() {
		var id = $(this).find('.id').html();
				$.post('transmission.php', {'id' : id}, function(data){$("#receiv").text(data);});
     });
});
</script>


Обработчик запроса transmission.php
<?php
if (isset($_POST['id'])) {$id = $_POST['id'];}
//здесь по id (ключу таблицы) из строки таблицы БД заполняем массив
return $BD_str[]; //возвращаем массив
?>


Блок модального окна, где принимается массив.
<div id="receiv">
<?php
//код
?>
</div>


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

laimas 18.05.2016 14:44

А что ее принимать, вот она данные приняты: function(data).
Наверное вопрос как вывести полученные данные? Ну так как вам надо, стройте по ним соответствующий html-код и вставляйте, данные то массив, а не html.

А это к чему на клиенте?

<div id="receiv">
<?php
//код
?>

</div>

Если модальное (собственно оно не модальное и не окно), значит открывается по запросу, а значит никаких РНР в нем просто быть не может.

NeilDaniels 18.05.2016 14:50

laimas, за пределами скрипта переменная недоступна, вот в чём проблема. Как скрипт передал id, так скрипт и получил (data). Как полученные данные передать блоку div с id="receiv">? Я этого так и не нашёл нигде.

По п.2 - да пока в тестовом режиме всё.

laimas 18.05.2016 15:02

return $BD_str[]; //возвращаем массив - откуда и куда?
Если это функция и из нее возврат, то запросивший ее скрипт должен выдать возвращенное значение серверу - echo main_function($_POST['id']). Причем, если после выдачи ответа серверу в РНР коде есть вывод, то не echo, а exit(main_function($_POST['id']));

Правда конструкция написанная даже с натяжкой не тянет на функцию, а значит return не при делах тут, он не выводит в браузер.

NeilDaniels 18.05.2016 15:13

laimas,
ну а как тогда transmission.php должен передать массив? Как тогда запрошенная функция с переданным ей значением и айдишником блока передаст этому блоку (а не вызывавшему функцию скрипту) сформированный массив? И как в этом блоке принять массив?
Что я неясного спрашиваю?

laimas 18.05.2016 15:19

Цитата:

Сообщение от NeilDaniels
ну а как тогда transmission.php должен передать массив?


Сервер общается с клиентом посредством HTTP, и все что он отдает клиенту, это строка, нет никаких массивов! Нет такого понятия в HTML.

Возвращать нужно в JSON формате, из которого клиент получит исходный массив.

Цитата:

Сообщение от NeilDaniels
Что я неясного спрашиваю?

Вы написали какую-то приблуду непонятную, наверное думая, что тут догадаются что вы там и как отдаете клиенту.

Прежде чем спросить и чтобы вас поняли, необходимо пояснять, тут же не чародеи однако.

NeilDaniels 18.05.2016 15:26

laimas,
хорошо, данные вернутся в JSON формате.
Как их разобрать в
<div id="receiv">
</div>
?

Извиняюсь, если выражаюсь непонятно, только учусь.

laimas 18.05.2016 15:32

Можете непосредственно указать методу .post(), что ожидаются данные в JSON, он разберет его (но при условии что нет ошибок в нем) и data будет уже массивом, если сервер отдает индексный массив, в противном случае это будет объект, в котором ключи ассоциативного массива будут являться его свойствами.

Чтобы обрабатывать ошибки возможные лучше использовать метод .ajax(), но можно и в .post() поступать так:

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

NeilDaniels 18.05.2016 15:38

laimas,
да по коду скрипта вызова функции понятно, видел не раз.

Но, [нецензурно и нетерпеливо], что должно быть в блоке
<div id="receiv">

</div>

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

laimas 18.05.2016 15:42

1) Какая функция?

2) Сервер может возвращать и готовый html код того, что должно быть вставлено на клиенте. Не зная как все это работает, почему используете массив?


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