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

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

Автор: 6epcepk
Дата сообщения: 18.04.2006 22:12
Страница разработчика: http://xajax-project.org/

Последняя версия: xAJAX 0.6beta1

Докуменатция: Смотреть.

Решения:
Загрузка файлов more
PHP Xajax Loading Message




Следует помнить!:
(мини-faq от 6epcepk'a)
Почему-то не обновляется/добавляется информация.
Не забываем как должна выглядить функция:

Код:
function test() {
$objResponse = new xajaxResponse();
$objResponse->setCharEncoding('windows-1251');
...
return $objResponse;
}
Автор: Oleg_Tarusov
Дата сообщения: 20.04.2006 20:46
Почему неправильно? Используй, я б также сделал. <br> для браузера перевод строки.
Автор: Cheery
Дата сообщения: 20.04.2006 22:11
6epcepk

Цитата:
Вопрос: как сделать, чтобы новая вставка производилась на новую строку?

вставка идет в элемент, который уже есть на странице. Хочется через строчку, то нужно либо выводить во второй элемент, который через строчку..
либо сразу выводить информацию через строчку..
если же вторая часть (с новой строки) идет после каких то действий пользователя, то либо запоминать первую и потом выводить все вместе..
Либо в конце первой части вставлять элемент при выводе, в который потом впихнется вторая часть.
Автор: 6epcepk
Дата сообщения: 23.04.2006 20:52
А вот как сделать вывод TITLE (тот, что в HEAD)?
Например, контент формируется в xajax-функции и вставляется в слой, а как вставить нужный заголовок для страницы? Попробовал сделать <TITLE ID="my_title>, в Опере прокатывает, а вот в ИЕ - нет. (Кроме того в спецификации тэг не имеет атрибутов.)
Автор: Cheery
Дата сообщения: 23.04.2006 22:08
6epcepk
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/title.asp
document.title
Автор: 6epcepk
Дата сообщения: 23.04.2006 22:49
Я что-то не понимаю: делаю такую xajax-функцию:

Код: function my($id)
{
    $objResponse = new xajaxResponse();
    
    $objResponse->addAssign("content", "innerHTML", $data['text']);
    $objResponse->addScript("var s = \"Now we change the title\"; alert(s); document.title = s;");

}
Автор: Cheery
Дата сообщения: 23.04.2006 22:51
6epcepk

Цитата:
В итоге работает только в ИЕ, а в Опере - нет. Что я неправильно делаю?

в опере есть javascript console.. посмотри, там будут все сообщения об ошибках
Автор: 6epcepk
Дата сообщения: 04.06.2006 09:46
Проблема с кириллицей?
Я ее решил следующим образом (может кому пригодится):
1. Если меняли кодировку по умолчанию в файле xajax.inc.php, то ее необхоимо выставить обратно:

Код: define ('XAJAX_DEFAULT_CHAR_ENCODING', 'utf-8');
Автор: edogs
Дата сообщения: 04.06.2006 11:41
Приносим извинения за легкий оффтоп, но кто-нибудь сравнивал это с дклабовским ajax-ом?
Автор: 6epcepk
Дата сообщения: 07.06.2006 13:11
Еще одно решение для корректного отображения кириллицы:

Код: include_once ("xajax.inc.php");

$xajax = new xajax();
$xajax->setCharEncoding('windows-1251');
$xajax->decodeUTF8InputOn();

function my_func() {

$objResponse = new xajaxResponse();
$objResponse->setCharEncoding('windows-1251');

...

return $objResponse;

}

$xajax->registerFunction("my_func");
$xajax->processRequests();
Автор: myaGi
Дата сообщения: 30.01.2007 18:29
люди просвятите.
юзаю xajax.
есть index.php. внутри есть инклюд menu.php в котором подключаю xajax и выполняю банальную вставку текста. понимаю что это из-за вложенной инклюдности. если же делаю подключение xajax в самом index.php то все ок, но мне этот вариант не подходит, т.к. в menu.php идут определения переменных и т.п. что посоветуете?
Автор: chulim
Дата сообщения: 30.01.2007 21:05
myaGi
а вопрос то где? точнее проблема.
Автор: 6epcepk
Дата сообщения: 31.01.2007 10:55
myaGi
Приведи код menu-скрипта и участок HTML, куда возвращает функция значение.
Автор: orionxxi
Дата сообщения: 13.02.2007 00:07
Народ, помогите разобраться новичку.

Есть код:

Код: require("xajax.inc.php");
function insertclient($data){
    $nickname = $data['nickname'];
    $icq = $data['icq'];
    $email = $data['email'];
    
    $response = new xajaxResponse();
    $db_conn =mysql_pconnect('localhost','root','') or die (mysql_error());
    mysql_select_db('sauna') or die (mysql_error);
    $sql_text = "INSERT INTO users VALUES (' ','$nickname','$passwort','$icq','$email')";
    $result = mysql_query($sql_text) or die(mysql_error());
    return $response;    
}
    $xajax = new xajax();
$xajax->registerFunction("insertclient");
    $xajax->processRequests();
    
?>
<html>
<head>
<? $xajax->printJavascript();?>
</head>
<body>
<script type="text/javascript">
<!--
xajax.loadingFunction =
function(){xajax.$('loadingMessage').style.display='block';};
function hideLoadingMessage()
{
xajax.$('loadingMessage').style.display = 'none';
}
xajax.doneLoadingFunction = hideLoadingMessage;
// --></script>
<form id="insert_form">
Benutzername: <input type="text" name="nickname" id="user_nickname"> </br>
ICQ: <input type="text" name="icq" id="user_icq"> </br>
Email: <input type="text" name="email" id="user_email"> </br>
<input type="submit" value="Insert" id="submitButton" onclick="xajax_insertclient(xajax.getFormValues('insert_form'));" /><p></p>
</form><br>
        <div id="loadingMessage" style="font-size: 22px; display: none;">
<img src="./images/working.gif" />
        </div>
        <br>
</body>
</html>
Автор: Cheery
Дата сообщения: 13.02.2007 03:44
orionxxi

Цитата:
В чем моя ошибка?

браузер?
если FF или Опера - смотри консоль ошибок..
Автор: 6epcepk
Дата сообщения: 13.02.2007 09:13
orionxxi
Поставить задержку в функцию добавления в базу.
Автор: orionxxi
Дата сообщения: 13.02.2007 12:06
Cheery

Ошибка действительно есть: xajax.js line 105, однако я в ява-скрипте не силен.

6epcepk

Добавление "слипа" ничего не дает.




Добавлено:
Проблема разрешилась следующим образом: (может быть кому-нибудь пригодится)


Код: <html>
<head>
<title>Testlauf von XAjaX</title>
<? $xajax->printJavascript();?>
</head>
<body>
<script type="text/javascript">
function signup(){
<!--
            xajax.$('submitButton').disabled=true;
            xajax.$('submitButton').value='Processing...';
            xajax_insertclient(xajax.getFormValues("insert_form"));
            return false;
}
// --></script>
<form id="insert_form" onsubmit="signup();" />
Benutzername: <input type="text" name="nickname" id="user_nickname"> </br>
ICQ: <input type="text" name="icq" id="user_icq"> </br>
Email: <input type="text" name="email" id="user_email"> </br>
<input type="submit" value="Insert" id="submitButton"/>
</form><br>
Автор: 6epcepk
Дата сообщения: 14.02.2007 00:27
И как же решилась?
Тут решение отличное от использование стандартных функций.

У меня работает отлично:

Код: 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";
    
}
Автор: orionxxi
Дата сообщения: 14.02.2007 14:45
6epcepk

Я же написал код.


Цитата:
У меня работает отлично:


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

Удачи.
Автор: RiNeo
Дата сообщения: 19.03.2007 08:09
Хочу научиться выводить таблицы посредством xAJAX... Кто сможет помочь?
Я пытался вывести ее посредством функции
Код: $objResponse->addAssign("tablebox", "innerHTML", $sOut);
Автор: 6epcepk
Дата сообщения: 19.03.2007 08:33
RiNeo
Во-первых, мой вам совет: используйте версию 0.5 beta.
Во-вторых, ini_set("error_reporting", E_ERROR), потому что ошибка где-то в коде однозначно.
Автор: RiNeo
Дата сообщения: 19.03.2007 16:28
6epcepk
Все равно не получается.
Простой текст выводится, а таблица не хочет.
Раньше хоть какое-то сообщение об ошибке вываливалось, а теперь молчком все делает.

Добавлено:
В документации, которая на Вики я мало чего понял, так как по-инглиш еще плох...
Автор: 6epcepk
Дата сообщения: 19.03.2007 22:56
RiNeo
Привет свой исходный код.
Автор: RiNeo
Дата сообщения: 21.03.2007 12:03
берсерк
Посмотри пожалуйста

Код:
<?php

/* Всегда подключаем файл из библиотеки xAjax*/
require('xajax_core/xajax.inc.php');

/* Эта функция возвращает информацию о текущем времени */
function PrintGroupList($num) {

    /* создаем экземпляр класса xajaxResponse */
    $objResponse = new xajaxResponse();
    /**
    include "config.php";
    $query = 'SELECT s_name, name, f_name FROM Students WHERE group_id = '.$num.' LIMIT 0, 30';
    $rez = mysql_query($query);
    if($rez) {
        $i = 0;
        $sOut = '<table><caption>Группа:</caption><colgroup span="5"><col id="c_0" /><col id="c_1" /><col id="c_2" /><col id="c_3" /><col id="c_4" /></colgroup>';
        
        $objResponse->assign("tablebox", "innerHTML", $sOut);
        $sOut = '<thead><tr><th id="no_bord">&nbsp;</th><th>№<br />п/п</th><th>Фамилия</th><th>Имя</th><th>Отчество</th></tr></thead><tbody>';
        $objResponse->assign("tablebox", "innerHTML", $sOut);
        $sOut = '<tr><form action="action2.php" method="POST"><td id="no_bord"><input type="checkbox" name="option1" value="a1" /></td>';
        $objResponse->assign("tablebox", "innerHTML", $sOut);
        while($rezult = mysql_fetch_assoc($rez)) {
            $i++;
            $sOut = '<td class="pad1 rght">'.$i.'.</td><td class="pad1">'.$rezult["s_name"].'</td>';
            $objResponse->assign("tablebox", "innerHTML", $sOut);
            $sOut = '<td class="pad1">'.$rezult["name"].'</td><td class="pad1">'.$rezult["f_name"].'</td></form></tr>';
            $objResponse->assign("tablebox", "innerHTML", $sOut);
        }
        $sOut = '</tbody></table>';
    }
    else {
        $sOut = '<p><b>Error: '.mysql_error().'</b></p>';
    }
    */
    /* Устанавливаем объект xajaxResponse для обновления элемента HTML у которого ID = 'tablebox' */
    $sOut = 'Привет!! - '.$num;
    $objResponse->assign("tablebox", "innerHTML", $sOut);

    /* возвращаем результат функции */
    return $objResponse;
}


/* создаем экземпляр класса xajax */
$objAjax = new xajax();

$objAjax->setCharEncoding("windows-1251");

/* регистрируем функцию 'PrintGroupList' для объекта xajax */
$objAjax->registerFunction('PrintGroupList');

/* обрабатываем запрос */
$objAjax->processRequest();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/xml; charset=windows-1251" />
    <title>Курсовой - группы</title>
    <?php $objAjax->printJavascript('../'); ?>
    <link rel="stylesheet" type="text/css" href="style_groups.css" />
</head>
<body>
    <div id="header">
        <a href="index.php">Главная</a> | Управление группами | <a href="sets.php">Настройки</a>
    </div>
    <div id="wrapper">
        <div id="container">
            <div id="content">
                <h1>Здесь должна отображаться текущая группа:</h1>
                <div id="tablebox" name="tablebox" >&#160;</div>
                <p class="last">
                    Donec euismod. Praesent mauris mi, adipiscing non, mollis eget, adipiscing ac, erat. Integer
                    nonummy mauris sit.
                </p>
            </div>
        </div>
        <div id="sidebar">
            <h1>Группы:</h1>
            <ul>
<?php
    include "config.php";
    $query = 'SELECT id `num`, name FROM groups';
    $rez = mysql_query($query);
    if($rez) {
        $i = 0;
        while($rezult = mysql_fetch_assoc($rez)) {
?>
                <li>
<?php
    echo('<button onclick="xajax_PrintGroupList('.$rezult["num"].')" >'.$rezult["name"].'</button>');
?>
                </li>
<?php
        }
    }
    else {
        echo('<p><b>Error: '.mysql_error().'</b></p>');
        exit();
    }
?>
            </ul>
        </div>
        <div class="clearing"> </div>
    </div>
    <div id="footer">Footer</div>
</body>
</html>
Автор: 6epcepk
Дата сообщения: 21.03.2007 22:24
Ставим $xajax->setFlag('debug', true); и смотрим ошибки
Автор: Brodyaga
Дата сообщения: 21.03.2007 22:29
Давно не смотрел xAjax, но если я правильно помню, он возвращает XML ответы клиенту. А если в
<response>
запихнуть код таблицы, структура XML-документа будет нарушена.
</response>
Может попробовать пихнуть текст таблицы в CDATA? Это лишь предположение, нужно юзать отладку.
Автор: 6epcepk
Дата сообщения: 21.03.2007 23:40
Brodyaga
Не, он что угодно возвращает.
Автор: RiNeo
Дата сообщения: 26.03.2007 07:18
По этому адресу я нашел интересный пример способа вывода таблицы. Исходник соответственно здесь. Но когда я переделал его для xAjax 0.5 как указано в документации - он почему-то перестал работать. Вот его код
Код: <?php
    #$XAJAX_DIR = "./xajax_0.2.4";
    #require_once("$XAJAX_DIR/xajax.inc.php");
    require('xajax_core/xajax.inc.php');
    $x = new xajax();
    $x->registerFunction("addRow");
    #$x->debugOn();
    $x->setFlag('debug', true);
    $x->processRequest();

    function addRow() {
        $id = rand();
        $resp = new xajaxResponse();
        $resp->create('rsvp_body', 'tr', "row_{$id}");
        for ($col = 1; $col < 4; $col += 1) {
            $resp->create("row_{$id}", 'td', "row_{$id}_td{$col}");
        }
        $resp->assign("row_{$id}_td1", 'innerHTML', "<input type=\"text\" size=\"24\" name=\"name_{$id}\" />");
        $resp->assign("row_{$id}_td2", 'innerHTML', "<input type=\"text\" size=\"18\" name=\"email_{$id}\" />");
        $resp->assign("row_{$id}_td3", 'innerHTML', "<input type=\"radio\" name=\"a_{$id}\" value=\"yes\" />" .
        "&nbsp;&nbsp;<input type=\"radio\" name=\"a_{$id}\" value=\"no\" checked=\"checked\" />");
        return $resp;
    }

function rowContent() {
$id = rand();
$row = "<td><input type=\"text\" size=\"24\" name=\"name_$id\" /></td>";
$row .= "<td><input type=\"text\" size=\"18\" name=\"email_$id\" /></td>";
$row .= "<td><input type=\"radio\" name=\"a_$id\" value=\"yes\" />";
$row .= "&nbsp;&nbsp;";
$row .= "<input type=\"radio\" name=\"a_$id\" value=\"no\" checked=\"checked\" /></td>";
return $row;
}

if ($_GET['submit']) {
$message="";
foreach ( $_GET as $key => $value ) {
list($key, $id) = split('_', $key);
$message = $message . "\n" . $key . ": " . $value;
}
# mail('thomas@stromberg.org', 'RSVP Test', $message, "From: rsvp@localhost");
echo "Your RSVP has been sent! Thanks!";
exit;
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>RSVP</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<?php $x->printJavascript(); ?>
</head>
<body>
    <form action="index.php">
        <input type="hidden" name="submit" value="Y" />
        <table id="rsvpTable" cellpadding="6">
            <thead id="rsvp_header">
                <tr>
                    <td>Имя</td>
                    <td>ё-мыло</td>
                    <td>Acceptance<br />Yes | No</td>
                </tr>
            </thead>
            <tbody id="rsvp_body">
                <tr id="row_00">
                    <? echo rowContent(); ?>
                </tr>
            </tbody>
        </table>
        <input type="button" value="Add Person" onclick="xajax_addRow();" />
        <p>Comments for the Bride & Groom:</p>
        <textarea name="comments" rows="8" cols="60"></textarea>
        <br style="clear: both;" />
        <input type="submit" value="Submit" />
    </form>
</body>
</html>
Автор: SRangeR
Дата сообщения: 07.04.2007 20:45
У меня такой вопрос
в тег див вставил форму (естественно при просмотре нтмл-кода она не работает)
как заставить ее передавать параметры через Хаякс

и еще вопрос как запихнуть Хаякс в определлную папку например /www/includens/ а вызывать его можно было из папки /www/modules/
Автор: 6epcepk
Дата сообщения: 07.04.2007 22:26
SRangeR
А документацию не судьба на wiki посмотреть?
xajax.getFormValues('form-name') - массив аналог $_REQUEST.


Цитата:
и еще вопрос как запихнуть Хаякс в определлную папку например /www/includens/ а вызывать его можно было из папки /www/modules/

Что-нибудь слышали об относительных и обсолютных путях?

Страницы: 12345678910

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


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