|
PHP массив вытащить в JS
Всем доброго!
Скажите пожалуйста, как реализовать такую схему и возможно ли это? Есть массив <? $model = array ( 'Honda'=>array('Accord', 'Accord Inspire', 'Acty', 'Acty Truck'), 'Mazda'=>array('Atenza', 'Autozam', 'AZ-3','Autozam Revue','Axela'), 'Nissan'=>array('AD', 'Almera', 'Almera Classic'), ); ?> Далее скрипт и форма <script> function loadCar(v){ var mas = eval(<?=json_encode($model["Honda"])?>); var el = document.getElementById('names'); while(el.childNodes.length>0){ el.removeChild(el.childNodes[el.childNodes.length-1]); } for(var i=0;i<mas.length;i++){ var opt = document.createElement("option"); opt.innerHTML=mas[i]; el.appendChild(opt); } } </script> <form> <select id="f_MarkaModel" name="f_MarkaModel" onchange="loadCar(this.value)"> <? foreach ($model as $brand => $carList) { echo '<option onchange="loadModel('.$brand.')" value="' . $brand . '">' . $brand . '</option>' . "\n"; } ?> </select> <select id="names"> <option>Выберите модель</option> </select> </form> Собственно вопрос в том, как мне получить не список hond а то, что появляется в (v) после смены селектора. |
Я так понял, это надо?
<script> function loadCar(v){ alert(v); } </script> <form> <select id="f_MarkaModel" name="f_MarkaModel" onchange="loadCar(this.value)"> <option value="kill">kill</option> <option value="all">all</option> <option value="humans">humans</option> </select> </form> |
Цитата:
Поскольку нет value у опшинов, то и получить там можно только индекс, который в общем и будет совпадать с индексом элемента массива. |
Нашел на js, принцип такой: вопрос - ответ, сервер выдает список с id. По id как есть все валится в объект, типа кэша, если юзер еще раз такой же выбор сделает, ну сидит тычет пагу, то скрипт проверяет есть такой id и, если есть - сервер не трогает, берет из свалки, иначе вопрос - ответ - в свалку. В финале рендер
var pop_filters = function(id) { var filters = JSON.parse(raw_filters[id]); // clear data list while (filter_datalist.lastChild) filter_datalist.removeChild(filter_datalist.lastChild); for(var i in filters) { var op = document.createElement('option'); op.value = filters[i]; op = filter_datalist.appendChild(op); op.appendChild(document.createTextNode(filters[i])); } }; |
filter_datalist - datalist, который тут ничем от select не отличается.
Ну вот, по тексту функции значение записывается одновременно в валуе и в текст. |
Вообще-то вопрос был не по коду. В том виде, в котором он написан - он работает. Выводит массив хонда, но при смене марки авто, когда alert(v); показывает Mazda или Nissan он не сработает так, ибо php уже не работает... тут надо ajax использовать или как-то еще... хм... но я не знаю как это реализовать, вот и прошу помощи.
|
idontknow, подожди, у тебя внутри функции loadCar(v) есть переменная v, в которой у тебя value из <option>($brand).
зачем тебе лишний запрос к серверу, если на клиенте все данные уже есть? Или что тебе надо вернуть? Уточни вопрос. |
угу, есть! :) но массив у меня в php
<?=json_encode($model["Honda"])?> как вместо "Honda" я поставлю loadCar(v) ? В этом-то и есть вопрос собственно |
idontknow, ах вот оно чо))
ну.. логика такая: вот тут смотри, как использовать XHR. Отправляешь пыхе эту v, на той стороне уже пыхой смотришь, что пришло и возвращаешь (прямо вот <?=json_encode($model[то, что пришло (v) ])?>), но только смотри, чтобы ничего лишнего не вернулось) и на этой стороне кидаешь то, что вернулось в переменную mas.. |
спасибо за совет. я тут и сам уже в эту сторону смотрю и пытаюсь это сделать, но пока не получается. методов кучу перепробовал... вот и думал, что кто-то может знает как это по шагам сделать. Потому как не получается у меня вернуть ничего.
Буду дальше пробовать, но люди добрые, может кто-то знает как это реализовать с лёту? Буду премного благодарен. пока же читаю, смотрю и пробую методом работает/неработает кучу примеров |
Часовой пояс GMT +3, время: 08:51. |
|