Обработка ответа $.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> Как в этом блоке принять переменную массива? Гугл перешарил так, что он каждый раз уже требует капчу. |
А что ее принимать, вот она данные приняты: function(data).
Наверное вопрос как вывести полученные данные? Ну так как вам надо, стройте по ним соответствующий html-код и вставляйте, данные то массив, а не html. А это к чему на клиенте? <div id="receiv"> <?php //код ?> </div> Если модальное (собственно оно не модальное и не окно), значит открывается по запросу, а значит никаких РНР в нем просто быть не может. |
laimas, за пределами скрипта переменная недоступна, вот в чём проблема. Как скрипт передал id, так скрипт и получил (data). Как полученные данные передать блоку div с id="receiv">? Я этого так и не нашёл нигде.
По п.2 - да пока в тестовом режиме всё. |
return $BD_str[]; //возвращаем массив - откуда и куда?
Если это функция и из нее возврат, то запросивший ее скрипт должен выдать возвращенное значение серверу - echo main_function($_POST['id']). Причем, если после выдачи ответа серверу в РНР коде есть вывод, то не echo, а exit(main_function($_POST['id'])); Правда конструкция написанная даже с натяжкой не тянет на функцию, а значит return не при делах тут, он не выводит в браузер. |
laimas,
ну а как тогда transmission.php должен передать массив? Как тогда запрошенная функция с переданным ей значением и айдишником блока передаст этому блоку (а не вызывавшему функцию скрипту) сформированный массив? И как в этом блоке принять массив? Что я неясного спрашиваю? |
Цитата:
Сервер общается с клиентом посредством HTTP, и все что он отдает клиенту, это строка, нет никаких массивов! Нет такого понятия в HTML. Возвращать нужно в JSON формате, из которого клиент получит исходный массив. Цитата:
Прежде чем спросить и чтобы вас поняли, необходимо пояснять, тут же не чародеи однако. |
laimas,
хорошо, данные вернутся в JSON формате. Как их разобрать в <div id="receiv"> </div>? Извиняюсь, если выражаюсь непонятно, только учусь. |
Можете непосредственно указать методу .post(), что ожидаются данные в JSON, он разберет его (но при условии что нет ошибок в нем) и data будет уже массивом, если сервер отдает индексный массив, в противном случае это будет объект, в котором ключи ассоциативного массива будут являться его свойствами.
Чтобы обрабатывать ошибки возможные лучше использовать метод .ajax(), но можно и в .post() поступать так: $.post('transmission.php', {'id' : id}, function(data){ if(data) $("#receiv").text(data); //$("#receiv").text(data); так конечно нельзя, подразумевается, что будет сформирован html из массива, и он будет вставляться else //иначе произошла ошибка }, 'json'); |
laimas,
да по коду скрипта вызова функции понятно, видел не раз. Но, [ <div id="receiv"> </div> , куда (или не туда?) функция возвращает ответ? Как там принять полученные значения??????????? Вот ни разу не видел примера, где принятые данные разбираются именно в #receiv. |
1) Какая функция?
2) Сервер может возвращать и готовый html код того, что должно быть вставлено на клиенте. Не зная как все это работает, почему используете массив? |
NeilDaniels,
Цитата:
А разбираются они в Цитата:
|
laimas,
1. 2. Полученные от transmission.php данные должны быть приняты в блоке #receiv, он же блок модального окна, данные рассовываются по полям input (это окно для редактирования строки таблицы БД). Что ещё непонятного???????????????????????? |
Dilettante_Pro,
а как из этого Цитата:
|
Цитата:
Вы написали три строки из этого файла и пойми попробуй чего там в нем делается. Могу только заметить, что вызывать функцию (пусть в этом файле она вызывается), в которой проверяется вот это: if (isset($_POST['id'])) это мягко говоря не прилично, логичнее вызывать функцию, если таковое установлено. Я не маг, я не могу догадаться как и что вы делаете, что вам конкретно надо, я могу лишь написать тезисно. Есть два способа отдать клиенту: 1) Формируем из данных полученных из базы например, таблицу обрамленную формой, которая содержит ее поля. Этот код отдаем клиенту, который вставляет его как HTML в нужное место. 2) Кодируем в JSON данные из базы и отдаем их клиенту. Клиент из полученного массива/объекта (о разнице читайте выше) формирует html код таблицы обрамленной формой с ее полями и вставляет в нужное место. Что ещё непонятного???????????????????????? Я что должен перед вами распинаться? Либо вы конкретно поясняете что отдаете клиенту и показываете эти данные, описываете что хотите получить, либо думайте сами. Я ведь тоже не собираюсь ликбезом заниматься. |
Цитата:
2. Почему именно так? Если, скажем, несколько разных таблиц (разное количество столбцов и т.д.), то что, для каждого вида таблицы писать свой серверный обработчик - построитель таблицы? |
В общем, всем спасибо, тему можно даже удалить, ибо к общему согласию по моей тупости не придём.
|
Цитата:
if(isset($_POST['name']) && (int)$_POST['name']) { //выполняем код } ибо если вам прислали туфту левую, то зачем же попусту делать запрос к базе, явно зная, что он ничего не вернет? Причем isset($_POST['name']) можно и опустить, если блокировать вывод предупреждений и понимать суть происходящего. Цитата:
Цитата:
Не обязательно, все зависит и от структуры таблиц, и если они различны, то запросы конечно будут свои, как и формы их обслуживающие. Но данные задачи можно автоматизировать на сколько это можно. А вот к какой таблице серверу обратиться, какие данные вернуть или какую уже готовую форму, сервер понимает по параметрам запроса клиента, под ожидаемые параметры и пишутся серверные скрипты обработчики. |
Цитата:
Если бы пришел HTML - все легло бы идеально. Перед размещением здесь же можно сделать любую обработку данных http://javascript.ru/blog/gordon-fre...jax-javascript http://professorweb.ru/my/javascript...level3/3_4.php |
Цитата:
Цитата:
Насчёт запроса и форм согласен, не сообразил сразу - на таблицу с данными на стороне клиента своя таблица в БД, и запрос-то будет отличаться. Но сформировать таблицу серверным скриптом, передать её до клиента, где JS (?) формирует эту же таблицу, - а не закапризничает ли функционал вывода модального окна, где должна быть таблица (+ кнопка, по нажатию на которую пойдёт запрос на обновление строки в таблице БД)? Не проще ли на клиенте принять данные и сформировать в таблицу в модальном окне? |
Цитата:
Как в div'е ловить принятые данные? Мне нахер (извиняюсь за французский) принятые данные не нужны в скрипте-функции вызова серверного скрипта с передачей данных, мне они нужны в блоке div, который лежит за пределами JS функции. Сколько раз это нужно повторить, чтобы дошло? И как принять данные в блоке div #receiv, я так нигде и не нашёл. |
NeilDaniels,
Цитата:
Обработка делается средствами скриптов, а не средствами html Ловить их там не нужно - $("#receiv").text(data); или $("#receiv").html(data); их именно туда и положит |
В целом учебная задача такая.
Есть некая форма накладной, данные хранятся в таблице БД. Есть форма вывода данных из ТБД, есть форма добавления накладной. По двойному клику на строке таблицы должна открываться форма редактирования накладной с уже заполненными полями. (Да, делаю через пятую точку, когда для заполнения полей формы делаю запрос к БД, а не заполняя поля напрямую из строки уже выведенной таблицы. По своим непонятным соображениям). По двойному клику передаю id строки на серверный скрипт, по запросу получаю данные из БД, и застрял на том, что не могу передать данные в div блок, в котором формируется форма редактирования (div блок изначально скрытый, рисуется через jqModal). |
Цитата:
|
NeilDaniels,
В div нет переменных - там есть (могут быть) элементы html Переменные есть в скрипте, о чем вам так многократно и говорится. Получили в скрипте data, разобрали их там же как угодно, сформировали массивы или что угодно - и делайте с ними что хотите. При чем тут div? |
Цитата:
|
NeilDaniels,
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
NeilDaniels,
Цитата:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <div id="receiv"> <input id="testdata" type="text" value='' /> </div> <script> var data = "Какие-то данные"; $('#receiv #testdata').val(data); </script> |
Dilettante_Pro,
т.е. $.post('transmission.php', {'id' : id}, function(data){$("#receiv").html(data);}, datatype: json; ); //получили ответ в формате json var massiv = JSON.parse(data); и далее разбирать так? Или опять не то? $val1 = massiv.val1; $val2 = massiv.val2; |
Цитата:
Только datatype: json; у метода $.post, это ошибка, ибо объект, это {}. Пишите просто в кавычках }, 'json');, и без точки с запятой после параметра, это тоже ошибка. Вроде бы и ссылку давал почитать, а пишите такую отсебятину, что ... |
laimas,
data через data.переменная или data[1], data[2] разбирать? Или как. Мозг сломал.... |
Если клиенту отдается индексный массив, то data[0], data[1], и т.д., причем ели это одномерный массив, а если многомерный, то обход циклом, в котором data[i][0], data[i][1], ... Если массив ассоциативный, то data.name, где name это имя поля sql-таблицы, или массив вложенный, то также в цикле.
Данные свои надо показывать, а то вам писали как делается не раз, а проку нет. |
NeilDaniels,
Дайте пример получаемых данных, и опишите внятно, что с ними надо сделать! $.post("/transmission.php",{"id":id},function(data){ //допустим, data = { val1: "aaa", val2: "bbb" } - объект for(var i in data){ alert( data[i] ); //перебираем все элементы объекта $("#receiv #testdata").append( data[i] ); //вставляем в блок } //или для конкретных ключей: var a = data['val1']; var b = data['val2']; alert (a+" , "+ b) },"json"); И да, возвращаемые данные в виде объекта или массива? |
Alex_63, по двойному клику на строке таблицы серверному php скрипту передаётся id (номер по порядку, он ключ таблицы базы данных). Скрипт по id из нужной строки получает данные из таблицы, формирует массив, возвращает набор данных вызвавшему JS скрипту.
Возвращаемые данные - тот же id, + 11-значное число (номер накладной), 2 адреса (отправителя и получателя), описание товара, и 4-5 чисел (объём/масса груза). Вернуть их надо в виде массива. В $.post же массив разобрать, и передать за пределы скрипта. Из этих данных заполняется форма редактирования накладной. Цитата:
|
NeilDaniels,
Как-то так: var arr = [];//назначаем переменную (function () { $("...").on("click",function () { $.post("/transmission.php",{"id":id},function(data){ arr = data;// переназначаем arr },"json"); }); function setHtml(){ if(arr.length<1)return; var sel = $("#receiv #testdata"); var str=""; for(var i=0;i<arr.length;i++){ var L= arr[i]; if(i==0){str+="ID товара: "+L+"<br>";} if(i==1){str+="Номер: "+L+"</br>";} if(i==2){str+="Адрес отправителя: "+L+"<br>";} if(i==3){str+="Адрес Получателя: "+L+"<br>";} if(i==4){str+="Описание: "+L+"<br>";} //ну и так далее ... } sel.html(str); }; //по какому-то событию вызываем функцию setHtml(), чтобы заполнить div данными })(); |
Цитата:
print_r($name), где $name имя массива. В отладчике будет ошибка, но в консоли можно будет увидеть ответ, в котором будет структура данных этого массива. Что давно просят - покажите свои данные, причем не обязательно весь массив, а только первый вложенный его. |
Alex_63,
можно data как-то иначе разобрать? Если, скажем, массив индексный, то можно заполнить новый массив из data[1], data[2] и т.д., а затем передать этот массив в div? |
Вы структуру своего массива покажите в конце концов или нет?
|
NeilDaniels,
1. Что значит - разобрать? 2. Нафиг формировать другой массив, когда есть уже массив с данными ? 3. В каком виде он должен вставляться в div ? Опишите, (просто строкой или как ? Чем не нравится мой Вариант ? 4. Как выше сказал laimas, - выложите пример массива! |
Часовой пояс GMT +3, время: 14:08. |