|
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, время: 11:53. |
|