Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Не работает php код в javascript-е

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 22 Апрель 2013 - 21:55

нашел в интернете скрипт, написанный на js для вывода городов в зависимости от выбора страны. там массив из названий городов выводится, я вместо этого массива поставил вывод из БД своих городов. вот этот js код
Страна:
    <select name="street" onChange="MkHouseValues(this.selectedIndex)">
    <option value="Россия">Россия</option>
    <option value="Казахстан">Казахстан</option>
    </select>
    &nbsp;Город:
    <select name="house">
    <option value="N/A">N/A</option>
    </select>
    <script type="text/javascript">
<!--
// Формируем массив городов
var aHouseValues = new Array(
<?php echo $base->showCity(1); ?>,
<?php echo $base->showCity(2); ?>
);
// ф-ция, возвращающая массив городов по заданной стране
function getHouseValuesByStreet(index){
    var sHouseValues = aHouseValues[index];
    return sHouseValues.split(","); // преобразуем строку в массив городов
}
// ф-ция, выводящая динамически список городов
function MkHouseValues(index){
    var aCurrHouseValues = getHouseValuesByStreet(index);
    var nCurrHouseValuesCnt = aCurrHouseValues.length;
    var oHouseList = document.forms["address"].elements["house"];
    var oHouseListOptionsCnt = oHouseList.options.length;
    oHouseList.length = 0; // удаляем все элементы из списка городов
    for (i = 0; i < nCurrHouseValuesCnt; i++){
	    // далее мы добавляем необходимые города в список
	    if (document.createElement){
		    var newHouseListOption = document.createElement("OPTION");
		    newHouseListOption.text = aCurrHouseValues[i];
		    newHouseListOption.value = aCurrHouseValues[i];
		    // тут мы используем для добавления элемента либо метод IE, либо DOM
		    (oHouseList.options.add) ? oHouseList.options.add(newHouseListOption) : oHouseList.add(newHouseListOption, null);
	    }else{
		    // для NN3.x-4.x
		    oHouseList.options[i] = new Option(aCurrHouseValues[i], aCurrHouseValues[i], false, false);
	    }
    }
}
// инициируем изменение элементов в списке городов, в зависимости от текущей страны
MkHouseValues(document.forms["address"].elements["street"].selectedIndex);
//-->
</script>
<?php echo $base->showCity(1); ?> <?php echo $base->showCity(2); ?> с помощью этих двух методов должен выводиться массив городов, но не выводится ничего, только N/A. сам метод такой
public function showCity($where) //ф.-ция когда нужно просто выбрать из базы и вывести на экран
{
  $data = $this->get("SELECT city_name FROM kz_city WHERE counry_id = ".$where);
  foreach($data as $d)
  {
   $text = $text.$d["city_name"].", ";
  }
  $a = strlen($text)-2;
  $text = substr($text,0,$a);
  //$text = preg_replace("#(,\s)+?$#","",$text);
  return $text;
}

 

 

  • 0

#2 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 22 Апрель 2013 - 22:18

var aHouseValues = new Array(
<?php echo $base->showCity(1); ?>,
<?php echo $base->showCity(2); ?>
);
это глупости, echo выведет в браузер. попробуй вот так

var aHouseValues = new Array(
<?=$base->showCity(1); ?>,
<?=$base->showCity(2); ?>
);

и еще, я надеюсь ты создаешь объект класса base? а то я не вижу в коде.

Но я бы так не делал, я бы сделал заполнение списка с помощью jquery.ajax
  • 0

#3 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 23 Апрель 2013 - 09:45

isvetlichniy, не понял в чем разница между обычным и упрощенным выводом?
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#4 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 23 Апрель 2013 - 10:13

isvetlichniy, объект base есть. я ajax вообще не знаю, я js то толком не знаю


  • 0

#5 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 23 Апрель 2013 - 10:31

Kuchuluk, а стоило бы узнать и js, и ajax. и jQuery
Очень полезно и сразу отпадают подобные вопросы. Я так в данный момент боюсь смотреть на этот код и уверен, что все можно сделать намного проще.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#6 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 23 Апрель 2013 - 11:50

это код не мой, я его в интернете нашел. он работал, когда там массив городов в ручную был написан, а с php кодом не работает


  • 0

#7 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 23 Апрель 2013 - 12:09

Значит неправильно интегрировал пхп в этот скрипт.
ctrl+u смотрел что получается?
  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#8 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 23 Апрель 2013 - 13:09

приведи исходный массив
я так предполагаю, что там он был строковой величиной

значит в кавычки твой php код надо брать
  • 0

#9 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 23 Апрель 2013 - 15:25

ctrl+u смотрел что получается?

посмотрел
<!--
// Формируем массив городов
var aHouseValues = new Array(
Курган, Омск,
Астана, Алматы, Актау, Актобе, Атырау, Караганда, Кзылорда, Кокшетау, Костанай, Петропавловск, Павлодар, Семипалатинск, Талдыкорган, Жезказган, Усть-Каменогорск, Тараз, Шимкент);
список городов в исходном коде получается

isvetlichniy,

я так предполагаю, что там он был строковой величиной

ну да, он строковым был в изначальном коде
вот такой он был
<script type="text/javascript">
<!--
// Формируем массив городов
var aHouseValues = new Array(
"Москва, Питер, Самара, Бугуруслан",
"Лондон, Мантчестер",
"Рим, Турин",
"Париж",
"Киев, Семфирополь"
);
// ф-ция, возвращающая массив городов по заданной стране
function getHouseValuesByStreet(index){
    var sHouseValues = aHouseValues[index];
    return sHouseValues.split(","); // преобразуем строку в массив городов
}

  • 0

#10 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 23 Апрель 2013 - 15:58

вот такой он был


ну так таким же и должен остаться
var aHouseValues = new Array(
"<?=$base->showCity(1); ?>",
"<?=$base->showCity(2); ?>"
);

  • 1

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru