Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   GridWindow, проблемы с массивом ... (https://javascript.ru/forum/extjs/2369-gridwindow-problemy-s-massivom.html)

Blondink0 14.12.2008 22:58

GridWindow, проблемы с массивом ...
 
Здравствуйте!
У меня возникла следующая проблема, имеется gridwindow, берет данные для вывода в колонки из массива Ext.grid.dummyData, пример кода:
Ext.grid.dummyData = [
[1, 2, 3 ,4],
[a, s, d, f],
[q, w, e, r]
...
];

Как можно сделать, чтоб данные брались из базы данных MySQL ...?
Например, у нас есть следующие колонки в gridwindow: страна, город, улица, кол-во жителей и в mysql есть следующие данные: country, sity, street, sum ...
И пополняется база данных за счет ввода данных пользователем, то есть кол-во записей всегда меняется, и не известно ... Реально ли вообще сделать, чтоб данные из mysql отображались в колонках gridwindow ...?
Заранее спасибо за все ответы.

Gvozd 14.12.2008 23:06

Цитата:

Сообщение от Blondink0
Как можно сделать, чтоб данные брались из базы данных MySQL ...?

с помощью AJAX получаете с сервера необходимые данные из БД
для этого у вас на сервере должен быть скрипт, который делает обращение к базе, и возвращает результат в удобном для JS виде(например JSON)

Blondink0 14.12.2008 23:30

Огромнейшее спасибо! Это то, что нужно.
Только в связи с этим возникло еще пару вопросов :*
Сильно ли подобный скрипт и обработка\получение данных будут нагружать сервер?
И вот в Мануале был приведен пример
$test = array("111","222","333");
echo json_encode($test);

Я с MySql на "вы" поэтому не знаю как лучше сделать ... То есть у меня должен получиться примерно следующий шаблон?
$a = SELECT country, COUNT(*) AS total FROM statistics
....
while ($b = $db->get_array($result)) ....
...
json_encode(<?=$b["total"]?>)

Или как-то по-другому?
Так же возникла проблема с передачей данных js скрипту ... Использую шаблон desktop из пакета extjs 2.2 , gridWindow находится внутри файла sample.js ... но чтоб передавать значения переменных, нужно сделать расширение файла *.php , но как тогда его вставлять в основной файл.html ...? если include "./sample.php"; то меню исчезает и скрипт перестает работать ... подскажите как лучше сделать ...
Заранее всем огромное спасибо за ответы!

Gvozd 15.12.2008 01:43

шаблон ваш синтаксически верен
точнее можно сказать только после полного выяснения что у вас есть в базе, и что вам надо извлечь оттуда
ну, я не буду пошагово все выяснять, сами разберетесь
ваш шаблон надо вставить ьв отедльный файл.
то есть у вас дорлжно быть два файла
один с js
один с ПХП(мускул там же)
и из первого идет обращение на второй
если не так понял, извините
у меня выходной, и я все еще пью
сессия, мать ее

Blondink0 15.12.2008 18:03

Вот в том и вопрос, как сделать обращение из js-файла ... Получается чтоб php работало внутри js-кода, например, использую конструкцию
var js = '<?=$param; ?>';
то расширение файла должно быть php ... или не так? потому что, если я подставляю такую конструкцию в изначальный файл, с расширением js, то подобная конструкция не работает ... А если я меняю расширение js-файла на *.php то скрипт перестает работать ... Даже если все переписывать как
Код:

<?
echo "js line 1";
echo "js line 2";
....
echo "js line 99";
....

То все равно скрипт не работает ...
Подскажите как можно объеденить файлы и сделать обращение из файла js ...?
Еще раз спасибо)
PS: Удачно сдать.

Gvozd 15.12.2008 18:22

AJAX
прочитайте для начала этот цикл статей, если еще этого не сделали.
а в двух словах, Ajax работет так:
у вас есть HTML-страничка с js-кодом(неважно подключаемым или нет)
там все довольно статично
расширения .htm .html .php для страницы и .js - для подключаемого JS-кода
помимо этого у вас должна быть должна быть страничка с генерируемыми данными. у нее расширение должно быть .php
так, вот скрипт из первой страницы делает запрос на вторую страницу, и получает данные из нее в переменную напрмер.
после чего обрабатывает эту переменную как вам угодно, например измняет HTML_код страницы
иначе не знаю как объяснить

Blondink0 15.12.2008 18:34

Спасибо за ссылку, все прочитаю ... Мне просто был интересен сам пример запроса из стр #1 к стр #2 ... но думаю прочитаю - разберусь. Спасибо еще раз.

Gvozd 15.12.2008 18:44

если будут вопросы после прочтения обращайтесь

Blondink0 15.12.2008 21:20

Вопросы к сожалению возникли ...
Попробовала сделать следующее:
файл test.php
Внутри него примерно следующий код:
Код:

<?
...
$a = ...;
...
$res = json_encode("$a");
echo $res;
?>

Потом файл index.php со следующим содержанием
Код:

<html>
<head>
...
<script type="text/javasctipt" src="sample.js"></script>
...
</head>
...
</html>

И файл sample.js, со следующим кодом:
Код:

...
//код extJs и тп
...
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', 'test.php', false);
xmlhttp.send(null);
...
Ext.grid.dummyData = [
xmlhttp.responseText
];
...

Но все-равно не работает ...
Возможно ли как-то содержание файла с расширением js перенести в файл с расширением php ...?
Возможно я что-то не так делаю ...
Если не сложно, не могли бы вы поделиться готовым примером ... так как не получается найти примера подобного ...

Gvozd 15.12.2008 21:35

там в одной из статей написано как пользоватся JSON-ом
вот цитата
Цитата:

Чтобы десериализовать объект, клиент просто пропускает текст через встроенный парсер, добавив скобкиvar reports = eval( '('+data+')' )
таким образом вам надо писать не
Код:

Ext.grid.dummyData = [
xmlhttp.responseText
];

а
Код:

Ext.grid.dummyData =
eval( '('+xmlhttp.responseText+')' );

а дальше уже обрабатываете переменную как вам угодно

Blondink0 15.12.2008 23:35

О, огромное спасибо, теперь почти все понятно, остается только вопрос, здесь пример с испльзованием 1-го cтороннего файла php, а возможно ли сделать подобное без использования большого кол-ва php-файлов, дело в том, что у меня в файле sample.js много grid-окон и соответственно много массивов, немного неудобно если для каждого массива используется отдельный файл php ...

Gvozd 15.12.2008 23:45

можно
например так
из grid-окна вызываете
xmlhttp.open('GET', 'test.php?grid=name1', false);


а в файле test.php пишите такое
if($_GET['grid']=='name1')
{
$a = ...;
echo json_encode($a);
}
elseif($_GET['grid']=='name2')
{
$a = ...;
echo json_encode($a);
}
elseif($_GET['grid']=='name3')
{
$a = ...;
echo json_encode($a);
}
elseif($_GET['grid']=='name4')
{
$a = ...;
echo json_encode($a);
}

соответственно переменная $a должна вычислятся в зависимости от того какой параметр вызван

это один из вариантов решения

Blondink0 15.12.2008 23:50

Точно, как я сразу не сообразила) get-запросы все решат. Спасибо еще раз, теперь должно все получаться. Надеюсь у меня больше не возникнит глупых вопросов. Спасибо!

Blondink0 16.12.2008 00:18

К сожалению все же возникла проблема ... при модификации sample.js скрипт перестает работать ... то есть исчезает меню, иконки перестают быть активными и тп ... То есть, допустим я дополняю следующий код:
getStartConfig : function(){
        return {
            title: 'xmlhttp.open('GET', 'test.php', false);', //здесь дополнение ...
            iconCls: 'user',
            toolItems: [{
                text:'Сброс',
                iconCls:'sbr',
                handler:function(){ window.location = "?do=cl"; },
                scope:this
},{
                text:'Выход',
                iconCls:'logout',
                handler:function(){ window.location = "?do=exit"; },
                scope:this
            }]
        };
    }

Если же построить отдельную конструкцию, и дать javascript-переменной значение
xmlhttp.open('GET', 'test.php', false);
А потом эту переменную подставить в поле 'text', все равно скрипт не работает ... в чем может быть проблема ...?
PS: Здесь пример startMenu ...
PS2: По сути, со всем разобралась, то есть теперь проблемы с получением и обработкой данных не осталось, за что, отдельное спасибо;)
Осталась только одна проблема, при каких-либо изменениях файла sample.js, например, если вписать в него какую-либо конструкцию, функцию или php-код, весь шаблон перестает работать, как описано выше ... Подскажите, как тут быть ...

Gvozd 16.12.2008 18:47

собственно я начинаю терятся и недопонимать вас
Цитата:

Сообщение от Blondink0
title: 'xmlhttp.open('GET', 'test.php', false);', //здесь дополнение ...

этой строчкой вы что хотели сделать?
не знаю что хотели, а будет следующее:
1)ошибка парсинга(следите за вложенностью кавычек, либо экранируйте их)
2)если исправить проблему с кавычками, то у вас в свойство title запишется текстовая перменнаяс таким содержимым
Код:

xmlhttp.open('GET', 'test.php', false);
не думаю чтоэто то, что вам нужно.
если же вы хотите получить туда ответ с сервера, то как ранее обсуждалось использщуем что-то по типу
Код:

title:eval( '('+xmlhttp.responseText+')' );
при этом не забываем что запрос должен был быть выполнен где-то раньше этого момента
то есть если у вас менюшка не общается интерактивно с сервером, а один раз прописывается все слова в ней, и не меняется, то запрос должен быть выполнен до ее прорисовки
тут я вам уже помочь не смогу, ибо с ExtJS не работал, поэтому код разобрать будет проблемно

Blondink0 16.12.2008 20:08

Спасибо, буду пробовать, просто непонятно было, почему при каких-либо изменениях в скрипте, он переставал работать ... Сейчас попробую сделать так, как написано выше, об результате напишу=)
Спасибо!
//Все-таки перестает работать, а можно ли как-то выводить ошибки кода? Как например с php error_reporting(); , только с js, с php понятно, можно указать в конфигурации сервера или же в ручную, но с js даже не представляю как ...


Часовой пояс GMT +3, время: 10:49.