Показать сообщение отдельно
  #8 (permalink)  
Старый 06.08.2017, 22:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ТвердолобыйЛамер
Русский - Задаешь вопрос - в ответ тебе три часа будут доказывать какой же ты депил.
И на что именно вы хотите получить ответ? Я уже говорил - хотите научится языку, хорошо, изучайте на простых примерах конструкции, функции, методы языка. Чего же тогда сразу ставить перед собой задачу, суть которой, судя по вопросам, вы не понимаете?

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

Вы топчитесь у мелочей, не понимая главного. Допустим, что ID элементов списка, это значения идентификаторов дерева описанного в SQL таблице. Поля таблицы имеют имена от A до F, в которых описаны идентификаторы дерева начиная от родителя и вниз. Запрос может содержать любое количество этих идентификаторов. Ваш список кроме идентификаторов более ничего не содержит. Как связать значения запроса с полями SQL таблицы, например для того, чтобы составить условие WHERE для запроса к таблице по значениям этих идентификаторов?

Если данные списка в общем никак не связаны с полями таблицы, то выход только один - данные в запросе должны быть в том же порядке, в котором они расположены в SQL таблице, то есть от родителя и ниже.

Передать на сервер массив не имеющий ключей для РНР нельзя, если только его не передавать как JSON. Если же формировать объект для Ajax, то объект обязательно должен иметь свойство=>значение. Если принять во внимание, что число не может быть свойством объекта, а париться с ним как со строкой не охота, то можно поступить и иначе - ID элемента списка, это будет свойство объекта, а его индекс в коллекции значением этого свойства. То есть на сервер будут передан развернутый массив, в котором значения (идентификаторы) являются ключами, а индексы (порядок в дереве/полях SQL таблицы) будут значениями.

$(function() {
   $('li').click(function(e) {
        e.stopPropagation();
        var obj = {}; 
        $(this).parents('li').add(this).each(function(i, e) {
            obj[e.id] = i
        });
        $.post(location, obj, function(d) {
            alert(d)
        })
    });  
});


Сервер такой массив и ожидает, только сервер знает истинные имена полей, которые свяжет их со значениями по их индексам.

if($_POST) {
    $keys = ['A', 'B', 'C', 'D', 'E', 'F']; //имена полей SQL таблицы
    $data = array_flip($_POST);
    $where = 'WHERE '.implode(' AND ', array_map(function($k, $v) {
        return $k . '=' . $v;    
    }, array_intersect_key($keys, $data), $data));
    
    exit($where);    
}


В результате выбора в списке super_gadzetas_B и запроса, клиент получит ответ WHERE A=musu_prekes AND B=gadzetai AND C=super_gadzetas AND D=super_gadzetas_B.

А ведь не обязательно так, и ваша первейшая задача представлять данные на клиенте так, чтобы сервер их однозначно интерпретировал как данные связанные со структурой SQL таблицы, иначе все эти ваши уроки коту под хвост.

alert() - это диалог, ничего развернуть он просто не может.

Последний раз редактировалось laimas, 06.08.2017 в 22:49.
Ответить с цитированием