Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: библиотека xAJAX

Автор: djinnet
Дата сообщения: 21.04.2007 11:30
Угу, добавил $objResponse->loadCommands(loadMessage()); а то что ты красным обвел, я так и не понял, там где-то ошибка чтоли? Можно чуть чуть по подробней? Я просто не могу понять видимо логики. Переписал добавление на пхп - ни каких проблем! А тут такая вот проблема.
$objResponse->addAssign("content","innerHTML",$output); - на сколько я понимаю и знаю, эта функция вставляет $output в <div id="content"> $output </div> я ведь прав? Я вот сидел всю ночь, парился. И добился того, что теперь они добавляются нормально, только не туда, КУДА надо. Это для меня какой-то нонсенс! Я всё это дело делаю, а добавляется на верх таблицы. А хотя id="content" находится внизу моей таблицы. Вобщем, ломал голову... ломал, и для пробы написан на пхп, думал, неужели я все не так правильно делаю. А вот и оно! На пхп все прекрасно пашед. Но ессно меня не устраивает один только пхп.
Ув-ый, Берсерк, ты обвел ошибки... если я тебя правильно понял, тогда вопрос, как это исправить? Буду очень рад любой помощьи!
Автор: 6epcepk
Дата сообщения: 21.04.2007 22:33
Понимаете, то что красным - я закомментировал, это надо вообще удалить, а вызывать только функцию через loadCommands.
Вызываемая функция должна возвращать XML.
И вообще я не особо понял смысла использования двух функций в данном случае - можно обойтись одной.

Добавлено:
Да, кстати, как вы себе представляете:

Код: <div><td>..</td></div>
Автор: djinnet
Дата сообщения: 21.04.2007 22:40
Может быть и одной, на счет этого я не подумал... начинающий, как ни как. Занчит должно выглядеть следущим образом:
function onStartLoad() {
$objResponse = new xajaxResponse();
$objResponse->loadCommands(loadMessage());
return $objResponse;
}

Да? А как тогда его выводить? Просто прописать <script type="text/javascript">
xajax_onStartLoad();
</script> ?

Хм.. ничего не получается все равно... Так почему убрали $objResponse->addAssign("content","innerHTML",$output);
? ведь без этого он мне не выведит в id="content" ... или опять что-то путаю?


Цитата:
Проблему четче.

Вобщем мне необходимо выводить данные из бд. Я через форму их записываю, и хочется, чтобы они добавлялись без перезагрузки страницы. И больше я вобщем-то ничего не хочу. Но при вызове функции, у меня возникает проблема. Функция ничего не отображает на браузере. Просто пустое поле. Хотя на 0.2 версии, все работает. Вот и не могу понять, почему в 0.5бета2 не работает.


Цитата:
Да, кстати, как вы себе представляете:

Код:<div><td>..</td></div>


Чтобы добавлять вперед, назад - prepend, append соответственно.


Вот в этом то и есть некоторая часть проблемы =) из-за <div><tr><td>...</td> ... и выводятся коряво данные. А как это понять prepend, append ? Впервые такое слышу...
Автор: 6epcepk
Дата сообщения: 22.04.2007 08:17
[more=Так]
Так выглядит функция, она возвращает в качестве результата XML, который вставляется в заданный бокс:

Код: function loadMessage($count = 10) {
$objResponse = new xajaxResponse();

$mysql=new mysql();
$mysql->connect();
$mysql->tmpl = "SELECT * FROM xajax_eur ORDER BY id DESC LIMIT 0, $count";
$mysql->args = array();
$mysql->query(__FILE__,__LINE__);
while($row=mysql_fetch_array($mysql->result)){
$name = $row['date_open'];
$date = $row['type'];
$message = $row['date_close'];
$co_eur = $row['cost_open'];
$cc_eur = $row['cost_close'];
$output = '<tr><td align="center" valign="center" bgcolor="ffffff" style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-BOTTOM: rgb(0,0,0) 1px solid">$name</td>';
$output .= '<td align="center" valign="center" bgcolor="ffffff" style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-BOTTOM: rgb(0,0,0) 1px solid">$date</td>';
$output .= '<td align="center" valign="center" bgcolor="ffffff" style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-BOTTOM: rgb(0,0,0) 1px solid">$message</td>';
$output .= '<td align="center" valign="center" bgcolor="ffffff" style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-BOTTOM: rgb(0,0,0) 1px solid">$co_eur</td>';
$output .= '<td align="center" valign="center" bgcolor="ffffff" style="BORDER-RIGHT: rgb(0,0,0) 1px solid; BORDER-BOTTOM: rgb(0,0,0) 1px solid">$cc_eur</td>';
$output .= '<td align="center" valign="center" bgcolor="ffffff" style="BORDER-BOTTOM: rgb(0,0,0) 1px solid"><a href="">13 Пункта</a></td></tr>';
}

$objResponse->addAssign("content","innerHTML", "<table>" . $output . "</table>");

return $objResponse;
}
Автор: djinnet
Дата сообщения: 22.04.2007 11:28
Вобщем, протестил на 2х версиях xajax'a на 0.5бета2 - ничего не выводит. Пробовал писать blablabla за место $output никаких изменений. В версии 0.2.4 видимо он не понимает функцию loadcommands, выдает ошибку. Я тут вот что ещё подумал, когда я добавляю данные через форму. Сначала обрабатывает функция добавления выглядит так:
Код: function sendMessage($formData) {
//получаем данные из формы
$do_eur = $formData['date_open_eur'];
$dc_eur = $formData['date_close_eur'];
$do_eur = phptomysql($do_eur);
$dc_eur = phptomysql($dc_eur);
$type_eur = $formData['type_eur'];
$co_eur = $formData['cost_open_eur'];
$cc_eur = $formData['cost_close_eur'];




//записываем сообщение в бд
$mysql=new mysql();
$mysql->connect();
$mysql->tmpl = "INSERT INTO xajax_eur (date_open, date_close, type, cost_open, cost_close) VALUES ('$do_eur', '$dc_eur', '$type_eur', '$co_eur', '$cc_eur')";
$mysql->args = array();
$mysql->query(__FILE__,__LINE__);

$output = loadMessage(); //подгружаем сохранненые сообщения

$objResponse = new xajaxResponse();
$objResponse->addAssign("content","innerHTML",$output); //выводим в div id="content" наши сообщения
return $objResponse;

}


Тут опять такая же история как с функцией onstartload, он загружает оутпут через функцию лоадмессэйдж. Я пробовал изменить на
Код: $objResponse = new xajaxResponse();
$objResponse->loadCommands(loadMessage());
return $objResponse;
Но все равно результатов никаких, где ещё я могу ошибаться?
Автор: 6epcepk
Дата сообщения: 22.04.2007 12:07

Цитата:
Пробовал писать blablabla за место $output никаких изменений.

Значит у вас нет такого бокса. Или скрипт выдает ошибку, отладчик включен?


Код: В версии 0.2.4 видимо он не понимает функцию loadcommands, выдает ошибку
Автор: djinnet
Дата сообщения: 22.04.2007 13:38
В версии 0.2.4 изменил на loadXML - заработало. http://img145.imageshack.us/my.php?image=97347978ld1.jpg вот как это выглядит. Но почему он пихает его сверху? Ведь в хтмле <div>...</div> расположен НИЖЕ чем таблица, которые Вы видите.

Код: <TABLE class="sortable-onload-3-reverse rowstyle-alt no-arrow paginate-7"
id=theTable cellSpacing=0 cellPadding=0> // Шапка таблицы
<THEAD>
<TR>
<TH class=sortable-date-dmy>дата отк</TH>
<TH class=sortable-text>цена отк</TH>
<TH class=sortable-text>тип</TH>
<TH class=sortable-currency>цена зак</TH>
<TH class=sortable-currency>дата зак</TH>
<TH class=sortable-currency>прибыль</TH></TR></THEAD>
<script>xajax_onStartLoad();</script>
<div id="content"></div> // А это тот самый div, куда по идее должен распологаться код
</TABLE>
Автор: 6epcepk
Дата сообщения: 22.04.2007 14:51
Учите HTML, как может div располагаться внутри table?
Автор: djinnet
Дата сообщения: 22.04.2007 15:08
Это то я знаю, div размещается между тегами <td>...</td> я так и сделал. И делал как-то до этого. Но тогда проблема в другом возникает. Он все данные кидает в 1ю таблицу, в моем случае "Дата отк" то есть там распологаются данные даты открытия, закрытия, тип, цена отк, закрытия. Как этого избежать? Крутил-вертел по всякому. Ни к чему человеческому не пришел. Буду признателен, если поможете.
Автор: 6epcepk
Дата сообщения: 22.04.2007 15:47
Что мешает вернуть в качестве результата не только строки с данными, но и всю таблицу, включая шапку?
Автор: djinnet
Дата сообщения: 22.04.2007 16:27
Включил и шапку и всё, но он почему то не читает css классы... Вобщем ерунда какая-то получается...пфф...
Автор: 6epcepk
Дата сообщения: 22.04.2007 17:04
Это уже не от аякса зависит.
Автор: djinnet
Дата сообщения: 22.04.2007 17:21
Разобрался с проблемой, теперь все работает тсабильно! Только пришлось сделать много лишних вызовов

Код: $objResponse->addAssign("content","innerHTML",$output);
$objResponse->addAssign("content1","innerHTML",$output1);
$objResponse->addAssign("content2","innerHTML",$output2);
$objResponse->addAssign("content3","innerHTML",$output3);
$objResponse->addAssign("content4","innerHTML",$output4);
$objResponse->addAssign("content5","innerHTML",$output5);
Автор: vania2112
Дата сообщения: 24.04.2007 19:03
Здрасте Всем.
Прочитал посты решил выложить свой пример вывода таблицы через xajax
1 Создание шапки таблицы в переменной $tex1

Код:
$tex1="<table width=100% border=1 cellspacing=1 cellpadding=0 style=border-collapse:collapse; background:#FFFFF0>
<tr bgcolor=#C0C0C0>
<th title='Сортировать по времени' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'waytime',xajax.getFormValues(my))><span id=head3 style=font-family:Symbol;color:black></span><b>Мин</b></th>
<th title='Сортировать Москва/Подмосковье' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'suburb',xajax.getFormValues(my))><span id=head5

style=font-family:Symbol;color:black></span><b>от метро</b></th>
    <th title='Сортировать по площади' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'areakitchen',xajax.getFormValues(my))><span id=head6

style=font-family:Symbol;color:black></span><b>Кухня</b></th>
    <th><b>S</b></th>
    <th><b>Комн</b></th>
    <th title='Сортировать по цене' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'prise',xajax.getFormValues(my))><span id=head9

style=font-family:Symbol;color:black></span><b>Ц</b></th>
    <th title='Сортировать по процентам' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'ag,kl',xajax.getFormValues(my))><span id=head11

style=font-family:Symbol;color:black></span><b>%</b></th>
    <th title='Сортировать по этажам' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'floorall,floor',xajax.getFormValues(my))><span id=head14

style=font-family:Symbol;color:black></span><b>Этаж</b></th>
    <th title='Сортировать по сведеньям' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'edishional',xajax.getFormValues(my))><span id=head15

style=font-family:Symbol;color:black></span><b>Д\Свед</b></th>
    <th><b>Тел.</b></th>
    <th title='Сортировать по фирме' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'owner',xajax.getFormValues(my))><span id=head17

style=font-family:Symbol;color:black></span><b>фирм</b></th>
<th title='Сортировать по дате' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'createdate',xajax.getFormValues(my))><span id=head20

style=font-family:Symbol;color:black></span><b>Дата</b></th>
    <th width=100><b>Инфо</b></th>
</tr>";
Автор: SRangeR
Дата сообщения: 24.04.2007 22:52
Я ))) Только оперу признаю )))

Цитата:
xajax.getFormValues()
- работает если внутри прописать название формы.

пример кнопки которая работает
<A onclick=\"xajax_testPollsAJAX(xajax.getFormValues('formPolls'));\">Голосовать</a>
Автор: vania2112
Дата сообщения: 25.04.2007 03:06
Извеняюсь неправильно сформулировал пост
не работает не сама xajax.getFormValues()
а создание кнопки, а также селекта, а то что нужно указывать имя формы эт и так понятно и у меня оно указано

Код:
$objResponse->addCreate("my", "button", "pres");
$objResponse->addAssign("pres","value","Вывести");
$objResponse->addAssign("pres","onClick","xajax_printing '$kols',$rooms,'$sort',xajax.getFormValues(my));");
Автор: djinnet
Дата сообщения: 27.04.2007 17:43
Возникла ещё одна проблема... вобщем, делаю поиск:

Код: function searchFormInt($formSearch) {
$feur = $formSearch['fuer'];
$seur = $formSearch['suer'];
$feur = phptomysql($feur);
$seur = phptomysql($seur);
$query = "Select * from xajax_eur where date_open >= '$seur' and date_open <= '$feur' order by `date_close`";
$result = @mysql_query($query);

$num_subcat = @mysql_num_rows($result);
$result = db_result_to_array($result);
while($row=dbarray($mysql->result)){
$name = $row['date_open'];
$date = $row['type'];
$message = $row['date_close'];
$co_eur = $row['cost_open'];
$cc_eur = $row['cost_close'];

$output .= "<td class=\"name\">$name</td><br>";
$output1 .= "<td class=\"name\">$message</td><br>";
$output2 .= "<td class=\"name\">$date</td><br>";
$output3 .= "<td class=\"name\">$co_eur</td><br>";
$output4 .= "<td class=\"name\">$cc_eur</td><br>";
$output5 .= "<td class=\"name\">$....</td><br>";

}
Автор: 6epcepk
Дата сообщения: 28.04.2007 22:23
vania2112

Цитата:
$objResponse->addAssign("pres","onClick","xajax_printing '$kols',$rooms,'$sort',xajax.getFormValues(my));");

=>
addEvent("buttonId", "onClick", "alert('worl!');

djinnet
И что это? Просто функция. А где функция аякс?
ПС: конструкцию mysql_query не только не стоит "заглушать" от ошибок (@), а наоборот: добавлять конструкцию - or die(mysql_error());

буду через неделю
Автор: djinnet
Дата сообщения: 01.05.2007 10:07
С этим я уже разобрался, там была маленька опечатка

Код: $feur = $formSearch['fuer'];
$seur = $formSearch['suer'];
$feur = phptomysql($feur);
$seur = phptomysql($seur);
Автор: djinnet
Дата сообщения: 03.05.2007 16:57
И с этим вопросом я сам разобрался =) Берсерк, просвяти меня как можно сделать паузу на некоторое время, внутри функции до какого-либо процесса? sleep(..) не помогает, так как он перед данной функцией делает тайм аут. А мне надо внутри функции сделать паузу. Допустим поменять знаечение:

Код:
$objResponse->addAssign("id","innerHTML","$blablabla");
потом сделать паузу на 2-4 секунды и после этого удалить
$objResponse->addRemove("id");
Автор: Delphi6
Дата сообщения: 12.05.2007 03:40
Вот решил немного поработать над собой (есть немного свободного времени) и изучить xAJAX. У меня получилось все с базовыми операциями но вот где я застрял.

Весь HTML текст странички я генерирую из PHP. Если я вставлю код в темплеит странички <?php $xajax->printJavascript(); ?> как это требуется по стандартам xAJAX, то конечно ни фига не сработает по той причине что содержимое странички выводится простым echo. A менять весь движок думаю из за этого тоже не рационально.

Что посоветуете сделать
Автор: Cheery
Дата сообщения: 12.05.2007 04:34
Delphi6
вставить метку, там где нужно вывести.. и потом при echo str_replace('<--metka-->',$xajax->printJavascript(),$str);
Автор: Delphi6
Дата сообщения: 12.05.2007 04:37
Cheery
Спасибо проверю, я не знал что $xajax->printJavascript() возвращает значения, я думал что она выводит результата прямо пользователю (через echo например)
Автор: Cheery
Дата сообщения: 12.05.2007 04:41
Delphi6

Цитата:
я не знал что $xajax->printJavascript() возвращает значения, я думал что она выводит результата прямо пользователю (через echo например)

я им не пользуюсь.. возможно и выводит.. тогда ловить то, что выводит

ps: я сам пишу
Автор: Delphi6
Дата сообщения: 12.05.2007 04:47
Cheery
Спасибо, посмотрел в исходнике и все стало ясно

Код: function printJavascript($sJsURI="", $sJsFile=NULL) {
print $this->getJavascript($sJsURI, $sJsFile);
}
Автор: Delphi6
Дата сообщения: 12.05.2007 14:43
Прошу не судить строго, но мне бы хотелось выслушать советы профессионалов, как говорится не хочется наступать на грабли. Мне не совсем понятно как можно с использованием XAJAX сгенерировать страничку динамически сразу же с самого начала. Ну представим такую ситуацию, у меня есть общий шаблон, слева есть <div id="menu">, справа <div id="selectoption"> и под низом справа уже сама страничка <div id="body">. Как я понимаю все эти дивы потом я буду динамически по отдельности менять, в зависимости какие операции пользователь произведет. Меня вот что интересует, а как сгенерировать страничку с самого начала? Ну типа пользователь же пока не выбрал ничего в меню, в опшенах и т.д. Да и как выберет если я ему сначала не отображу меню (которое тоже допустим динамически меняется), на данный момент я сообразил подцепить на onload боди xajax_init функцию которая будет запускаться только один раз и при первой загрузке странички, что вы думаете я правильно все делаю?

п.с. И как можно сделать что бы до того как загружается часть данных с сервера в центре показывался маленькое окошечко (из div-а например) с gif файлом и типа "крутящими часами", что часто видел на других сайтах.
Автор: Brodyaga
Дата сообщения: 12.05.2007 16:17
Гм...Это очень неудачный в плане быстродействия и логики выбор.

Код:
if(!isset($_REQUEST['i_need_to_fetch_ajax_page_i_m_xajax'])){
//ВЫВОДИМ напрямую содержимое этих слоев
echo "<div id='menu'>...";
}
else{
//выполняем xajax_response
}
Автор: 6epcepk
Дата сообщения: 12.05.2007 22:14
Delphi6


Код: function showLoadingMessage() {
    
    if (navigator.appName == "Microsoft Internet Explorer") {
        // document.body.scrollTop;
        document.getElementById("ajax-loading").style.top = document.body.scrollTop;
    } else{
        document.getElementById("ajax-loading").style.top = window.pageYOffset;
    }
    document.getElementById("ajax-loading").style.display = "block";
    
}

function hideLoadingMessage() {
    
     document.getElementById("ajax-loading").style.display = "none";
    
}

xajax.loadingFunction = showLoadingMessage;
xajax.doneLoadingFunction = hideLoadingMessage;
Автор: sTa1kEr
Дата сообщения: 13.05.2007 02:22

Цитата:
Мне не совсем понятно как можно с использованием XAJAX сгенерировать страничку динамически сразу же с самого начала.

Это не имеет смысла...
Цитата:
Ну представим такую ситуацию, у меня есть общий шаблон, слева есть <div id="menu">, справа <div id="selectoption"> и под низом справа уже сама страничка <div id="body">. Как я понимаю все эти дивы потом я буду динамически по отдельности менять, в зависимости какие операции пользователь произведет. Меня вот что интересует, а как сгенерировать страничку с самого начала?

Очень просто. Есть некий метод/класс/функция которая генерирует страничку, через нее и выводишь содержимое первый раз и через веб сервер.
Цитата:
на данный момент я сообразил подцепить на onload боди xajax_init функцию которая будет запускаться только один раз и при первой загрузке странички, что вы думаете я правильно все делаю?

Плохая идея. Да и зачем это надо? Когда проще в самом скрипте вызвать ту же функцию.
Цитата:
И как можно сделать что бы до того как загружается часть данных с сервера в центре показывался маленькое окошечко (из div-а например) с gif файлом и типа "крутящими часами", что часто видел на других сайтах.

Достаточно просто, но лучше просто посмотреть код, чем объяснять как это делается. Если хочешь пришлю наглядный пример.
Автор: Delphi6
Дата сообщения: 13.05.2007 02:34
Brodyaga

Цитата:
Гм...Это очень неудачный в плане быстродействия и логики выбор.

Спасибо обязательно пересмотрю альтернативный подход.

6epcepk
Спасибо, как раз то что нужно было И главное как просто все реализовано, мне с каждым днем все больше и больше нравится этот xAJAX.

sTa1kEr

Цитата:
Плохая идея. Да и зачем это надо? Когда проще в самом скрипте вызвать ту же функцию.

Согласен, наверно вчера мозги вообще не работали И вправду, почему при первом же запуске не сгенерировать мне все?


Цитата:
Достаточно просто, но лучше просто посмотреть код, чем объяснять как это делается. Если хочешь пришлю наглядный пример.

Спасибо, мне уже 6epcepk посоветовал как это сделать, если ничего не получится буду разбирать ваш пример .

2 ALL
Как ни странно но я снова застрял На этот раз не могу мой DIV отобразить над страничкой, хотя я указывал z-index но тоже не помогло, где то что то упустил, подскажите пожалуйста

Код: <div id="ajaxloading" style="display:none; width:100%; height:100%; padding: 50% 50% 50% 50%; position:absolute; z-index:64000;">
<div style="border: 1px solid #000000; width: 85px; height: 25px; background-color:#FFFFFF;">
<div align="center" style="padding-top: 6px; font: 10px bold Verdana;"><img src="img/loading-bar.gif" width="75px" height="5px"><br>LOADING...</div>
</div>
</div>

Страницы: 12345678910

Предыдущая тема: AJAX


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.