Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как передать двумерный массив из PHP в JavaScript

15K
11 мая 2007 года
Vert
37 / / 18.01.2007
Задавал этот вопрос в одной из тем этого форума и меня отправили учить... учил-учил и ни к чему толковому не пришёл....

Есть три формы (select), содержимое которых изменяется взависимости от выбора предыдущих (первая статическая), причём выборка последующих происходит через запрос к базе мускуль.

в массиве явескрипт нужны 2 поля (id и title) - соответственно получается двумерный массив (кроме первого), как их передать?

не знаю правильно - нет сделал, может идея правильная, но где-то мелкие ошибки???
Код:
function SectionArray (<?$id?>)
{
    section = newArray
    ("<?
    $result = mysql_query("SELECT * FROM discipline_section_tbl WHERE id_discipline=$id");
    while ($row = mysql_fetch_array($result))
    {
        ?>
        section =<?echo $row["id"];?>
        section [j]=<?echo $row["title"];
    }
    ?>")
}

подскажите плиз, а то мозг уже кипит.... :o
13
11 мая 2007 года
RussianSpy
3.0K / / 04.07.2006
Бредятина какая-то у тебя написана, но постараюсь телепатически помочь:

Код:
function SectionArray ()
{
    section = new Array();
   
<?
    $result = mysql_query("SELECT * FROM discipline_section_tbl WHERE id_discipline=$id");
   $i = 0;
   while ($row = mysql_fetch_object($result))  
    {
        echo "section [$i][0]= $row->id;\n";
        echo "section [$i][1]= '$row->title';";
        $i++;
    }
?>
}


Выглядит жутковато...
Я не тестировал - проверь сам.

Можешь также глянуть в сторону неплохой функции json_encode()
http://ru2.php.net/manual/ru/function.json-encode.php
Только перед ее употреблением проверь ее наличие в твоем РНР интерпретаторе.
15K
11 мая 2007 года
Vert
37 / / 18.01.2007
не работает такая штука.... может и я не правильно пытаюсь отобразить...
сделал массив из одного элемента:
 
Код:
sections = new Array();  
<?
   $result = mysql_query("SELECT * FROM discipline_section_tbl");
   $i = 0;
   $row = mysql_fetch_object($result);  
   echo "section [$i] = $row->id;\n";
?>

есть такая функция:
 
Код:
function createMenus()
{
 for (var i=0; i<5;i++ )
 {
 document.Menu.section.options.text=sections;
 }
}

запускаю функцию:
 
Код:
<body &#111;&#110;Load="createMenus()">

и пытаюсь вывести массив:
 
Код:
<form name="Menu">
<select name="section">
    <option></option>
</select>

пример взял отсюда: http://www.javaportal.ru/javascript/examples/dynamicmenu.html
1.9K
11 мая 2007 года
InterWen
331 / / 16.09.2006
2 RussianSpy:

А разве в ЖС так вот сразу создаются элементы произвольной глубины многомерного массива? Как там по докам - не помню, но у меня никогда не получалось, поэтому приходилось записывать как:


Код:
//...................
   while ($row = mysql_fetch_object($result))  
    {

        // !!! Новый вложенный массив многомерки
        // ++++++++++++++++
        echo "section [$i] = new Array();\n";
        // --------------------

        echo "section [$i][0]= $row->id;\n";
        echo "section [$i][1]= '$row->title';";
        $i++;
    }
13
11 мая 2007 года
RussianSpy
3.0K / / 04.07.2006
2InterWen: не уверен =)

Вот дернул кусок кода из движка Sajax, который преобразовывает переменные, массивы и объекты РНР в JSON строки. Написано не очень красиво, но работает. Повторюсь - это кусок кода либы, писал ее не я.

Код:
//
    // Helper function to return an eval()-usable representation
    // of an object in JavaScript.
    //
    function sajax_get_js_repr($value) {
        $type = gettype($value);
       
        if ($type == "boolean") {
            return ($value) ? "Boolean(true)" : "Boolean(false)";
        }
        elseif ($type == "integer") {
            return "parseInt($value)";
        }
        elseif ($type == "double") {
            return "parseFloat($value)";
        }
        elseif ($type == "array" || $type == "object" ) {
            //
            // XXX Arrays with non-numeric indices are not
            // permitted according to ECMAScript, yet everyone
            // uses them.. We'll use an object.
            //
            $s = "{ ";
            if ($type == "object") {
                $value = get_object_vars($value);
            }
            foreach ($value as $k=>$v) {
                $esc_key = sajax_esc($k);
                if (is_numeric($k))
                    $s .= "$k: " . sajax_get_js_repr($v) . ", ";
                else
                    $s .= "\"$esc_key\": " . sajax_get_js_repr($v) . ", ";
            }
            if (count($value))
                $s = substr($s, 0, -2);
            return $s . " }";
        }
        else {
            $esc_val = sajax_esc($value);
            $s = "'$esc_val'";
            return $s;
        }
    }
15
11 мая 2007 года
shaelf
2.7K / / 04.05.2005
http://json.org
15K
11 мая 2007 года
Vert
37 / / 18.01.2007
посмотрите мой пост, в чём ошибка???
244
12 мая 2007 года
UAS
2.0K / / 19.07.2006
Vert, используй DOM.. И кстати правильно без ошибок именуй переменные.
Мой пример может и не правилен, но пашет. В JS я не силен
Код:
<script language="JavaScript">
sections = new Array();    
<?  
   $result = mysql_query("SELECT * FROM discipline_section_tbl");  
   for($i=0;$row = mysql_fetch_array($result);$i++) {
       echo "sections[$i] = {$row['id']};";
   }  
   echo("count=".mysql_num_rows($result).";");
?>

function createMenus()
{
 for (var i=0; i<count;i++) {
     option=document.createElement("option");
     text=document.createTextNode(sections);
     
     option.appendChild(text);
     document.getElementById("section").appendChild(option);
 }
}  
</script>

<body &#111;&#110;Load="createMenus()">

<form>
 <select id="section"></select>
</form>
......................


Вот. Функция JS должна пахать. Остально может выдаст ошибку, пока я на цикл переписывал. Вот...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог