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)

laimas 20.05.2016 20:15

Цитата:

Сообщение от NeilDaniels
var massiv = JSON.parse(data);

Это зачем, если методу указан тип принимаемых данных? Если он указан, то data уже будет равная объекту (массиву), и JSON.parse(data) совсем не нужен. Вам же писалось об этом.

Только datatype: json; у метода $.post, это ошибка, ибо объект, это {}. Пишите просто в кавычках }, 'json');, и без точки с запятой после параметра, это тоже ошибка.

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

NeilDaniels 20.05.2016 21:51

laimas,
data через data.переменная или data[1], data[2] разбирать? Или как. Мозг сломал....

laimas 21.05.2016 08:01

Если клиенту отдается индексный массив, то data[0], data[1], и т.д., причем ели это одномерный массив, а если многомерный, то обход циклом, в котором data[i][0], data[i][1], ... Если массив ассоциативный, то data.name, где name это имя поля sql-таблицы, или массив вложенный, то также в цикле.

Данные свои надо показывать, а то вам писали как делается не раз, а проку нет.

Alex_63 21.05.2016 12:31

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");

И да, возвращаемые данные в виде объекта или массива?

NeilDaniels 21.05.2016 13:04

Alex_63, по двойному клику на строке таблицы серверному php скрипту передаётся id (номер по порядку, он ключ таблицы базы данных). Скрипт по id из нужной строки получает данные из таблицы, формирует массив, возвращает набор данных вызвавшему JS скрипту.
Возвращаемые данные - тот же id, + 11-значное число (номер накладной), 2 адреса (отправителя и получателя), описание товара, и 4-5 чисел (объём/масса груза).
Вернуть их надо в виде массива.
В $.post же массив разобрать, и передать за пределы скрипта. Из этих данных заполняется форма редактирования накладной.

Цитата:

В целом учебная задача такая.
Есть некая форма накладной, данные хранятся в таблице БД. Есть форма вывода данных из ТБД, есть форма добавления накладной.
По двойному клику на строке таблицы должна открываться форма редактирования накладной с уже заполненными полями. (Да, делаю через пятую точку, когда для заполнения полей формы делаю запрос к БД, а не заполняя поля напрямую из строки уже выведенной таблицы. По своим непонятным соображениям). По двойному клику передаю id строки на серверный скрипт, по запросу получаю данные из БД, и застрял на том, что не могу передать данные в div блок, в котором формируется форма редактирования (div блок изначально скрытый, рисуется через jqModal).
З.Ы. Так понимаю, мне этим (web, php, mysql) даже не стоит заниматься, если не могу понять, что мне надо и как это делается?

Alex_63 21.05.2016 14:26

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 данными

})();

laimas 21.05.2016 15:04

Цитата:

Сообщение от NeilDaniels
Возвращаемые данные - тот же id, + 11-значное число (номер накладной), 2 адреса (отправителя и получателя), описание товара, и 4-5 чисел (объём/масса груза).

Зачем гадать всем? Перед операцией выдачи данных (этого массива) клиенту, прописать:

print_r($name), где $name имя массива. В отладчике будет ошибка, но в консоли можно будет увидеть ответ, в котором будет структура данных этого массива. Что давно просят - покажите свои данные, причем не обязательно весь массив, а только первый вложенный его.

NeilDaniels 21.05.2016 16:51

Alex_63,
можно data как-то иначе разобрать? Если, скажем, массив индексный, то можно заполнить новый массив из data[1], data[2] и т.д., а затем передать этот массив в div?

laimas 21.05.2016 17:27

Вы структуру своего массива покажите в конце концов или нет?

Alex_63 21.05.2016 17:59

NeilDaniels,
1. Что значит - разобрать?
2. Нафиг формировать другой массив, когда есть уже массив с данными ?
3. В каком виде он должен вставляться в div ? Опишите, (просто строкой или как ? Чем не нравится мой Вариант ?
4. Как выше сказал laimas, - выложите пример массива!


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