Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобраться
 
 автор: m@rchello   (30.05.2007 в 11:00)   письмо автору
 
 


<?
$sel 
= @mysql_select(true,"SELECT DISTINCT marka,model FROM yu_price ORDER BY model",false);
$cs=count($sel)-2;
?>

<script language="javascript">
function sel_mod(lotid)
         {
         arr = <?=$sel;?>;
         ca=<?=$cs?>;
         ret1='';
         for(i=0;i<=ca;i++)
            {
            if (lotid==arr[i]['marka'])
               ret1+='<option value="' + arr[i]['model'] + '">' + arr[i]['model'] + '</option>';
            }
           ret='<SELECT name="model"><option><Не имеет значения></opion>'+ ret1 + '</SELECT>';
         document.getElementById('sel_mod').innerHTML=ret;
         }
</script>


В переменной $sel лежит массив такого вида

Array ( 
[0] => Array ( [0] => Toyota [marka] => Toyota [1] => Allion [model] => Allion ) 
[1] => Array ( [0] => Mazda [marka] => Mazda [1] => Atenza Wagon [model] => Atenza Wagon ) 
[2] => Array ( [0] => Nissan [marka] => Nissan [1] => Avenir [model] => Avenir ) 
[3] => Array ( [0] => Nissan [marka] => Nissan [1] => Bluebird Sylphy [model] => Bluebird Sylphy ) 
[4] => Array ( [0] => Toyota [marka] => Toyota [1] => Caldina [model] => Caldina )
)

так вот этот массив почему то не передаётся в ява переменную
в чём причина?

   
 
 автор: yuk   (30.05.2007 в 11:11)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:00)
 

В PHP я не силен, но разве такая инструкция

=$sel;

не равнозначна

echo $sel;

?

Возможно надо написать

         arr = <?$sel;?>
         ca=<?$cs;?>;

   
 
 автор: m@rchello   (30.05.2007 в 11:21)   письмо автору
 
   для: yuk   (30.05.2007 в 11:11)
 

с php всё верно
а вот в яве проблемы
для начала он выводит ошибку здесь

if (lotid==arr[i]['marka'])

Ошибка вида
"arr[...].marka" - есть NULL или не является обьектом

   
 
 автор: m@rchello   (30.05.2007 в 11:22)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:21)
 

но массив в php с таким ключом(параметрами) есть точно! проверял
тоесть проблема получается в передаче массива из php в javascript

   
 
 автор: coloboc66   (30.05.2007 в 11:24)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:21)
 

Нельзя явно передать массив из РНР в ява-скрипт. Сначала на РНР преобразуйте массив в строку, потом передайте эту строку ява-скрипту, а потом ява-скриптом снова сделайте массив из этой строки.

   
 
 автор: m@rchello   (30.05.2007 в 11:34)   письмо автору
 
   для: coloboc66   (30.05.2007 в 11:24)
 

примерно так?

function sel_mod(lotid)
         {
         arr='';
         <?
         
for ($j=0;$j<=$cs;$j++)
            {
            
?>
            arr[<?=$j?>]['marka']='<?=$sel[$j]['marka']?>';
            arr[<?=$j?>]['model']='<?=$sel[$j]['model']?>';
            <?
            
}
         
?>
         ca=<?=$cs?>;
         ret1='';
         for(i=0;i<=ca;i++)
            {
            if (lotid==arr[i]['marka'])
            ret1+='<option value="' + arr[i]['model'] + '">' + arr[i]['model'] + '</option>';
            }
           ret='<SELECT name="model"><option><не имеет значения></opion>'+ ret1 + '</SELECT>';
         document.getElementById('sel_mod').innerHTML=ret;
         }

   
 
 автор: m@rchello   (30.05.2007 в 11:37)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:34)
 

если так то всё равно не работает
Ошибка
"arr.0" - есть NULL или не является обьектом

   
 
 автор: coloboc66   (30.05.2007 в 11:48)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:37)
 

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=37494&page=4

   
 
 автор: m@rchello   (30.05.2007 в 12:13)   письмо автору
 
   для: coloboc66   (30.05.2007 в 11:48)
 

там пример с одномерным массивом а как зделать с двумерным?

   
 
 автор: coloboc66   (30.05.2007 в 12:15)   письмо автору
 
   для: m@rchello   (30.05.2007 в 12:13)
 

Читайте посты CNT

   
 
 автор: mesos   (30.05.2007 в 12:44)   письмо автору
 
   для: m@rchello   (30.05.2007 в 11:34)
 

Предложу воспользоваться функцией преобразования любых переменных php в правильный объект JavaScript (заимствована из библиотеки Котерова и немного доработана).
Функция buildJSON() возвращает корректный JavaScript код для любой переменной php, который после выполнения eval'ом создает обычный объект, с которым можно делать все, что угодно.
Попробуйте следующий пример:

<?php

$output 
= array(array('item1''item2''item3'),
                
'key1'=>'value1',
                
'key2'=>array('subkey'=>'subvalue',array('item1''item2''item3')));

function 
buildJSON($a=false) {
    if(
is_null($a)) return 'null';
    if(
$a===false)  return 'false';
    if(
$a===true)   return 'true';
    if(
is_scalar($a)) {
        if(
is_float($a)) $a str_replace(",""."strval($a));
        static 
$jsonReplaces = array(
        array(
"\\""/""\n""\t""\r""\b""\f"'"'),
            array(
'\\\\''\\/''\\n''\\t''\\r''\\b''\\f''\"'), 
    ); return 
'"'.str_replace($jsonReplaces[0], $jsonReplaces[1], $a).'"'; }
    
$isList true;
    for (
$i 0reset($a); $i count($a); $i++, next($a)) {
        if(
key($a)!==$i) { 
            
$isList false
            break; } }
    
$result = array();
    if(
$isList) {
        foreach(
$a as $v$result[] = buildJSON($v);
        return 
'[ '.join(', '$result).' ]';
    } else {
        foreach(
$a as $k=>$v$result[] = buildJSON($k).': '.buildJSON($v);
        return 
'{ '.join(', '$result).' }'; } 
}

?>
<script type="text/javascript">
eval('var output=<?=buildJSON($output)?>');

alert(output[0]);
alert(output.key1);
alert(output.key2.subkey);
alert(output.key2[0][2]);
</script>

т.е. в итоге мы имеем JS-хеш output полностью идентичный php-массиву $output.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования