Как приятно описывать проблему на русском
Я использую для своего сайта xajax (ajax franework for php + ajax).
Для наглядности, конечно, могу выложить на хостинг но пока попытаюсь описать проблему русским языком. русским + php + js
require ("xajax/xajax_core/xajax.inc.php");
$xajax = new xajax();
//$xajax->setCharEncoding('windows-1251');
//$xajax->setFlag("decodeUTF8Input",true);
//define ('XAJAX_DEFAULT_CHAR_ENCODING', 'windows-1251');
$xajax->registerFunction("changeContent");
require_once "db.php";
function changeContent($t)
{
GLOBAL $con;
$q = "SELECT `$t` FROM `texts` WHERE 1";
$res_Q = mysql_query($q, $con) or die (mysql_error());
$text = mysql_result($res_Q, 0, "$t") or die (mysql_error());
$xjxResponse = new xajaxResponse();
$xjxResponse->assign('buff', 'value', $t." + ".$text);
return $xjxResponse;
}
//changeContent();
$xajax->processRequest();
echo '<?xml version="1.0" encoding="utf-8"?>';
не буду вдаваться в подробности использования библиотеки xajax, тем более, я уверен, что кто-то использует (библиотека-то классная
)
в общем, changeContent цепляет из базы данные и пихает их в буфер
<form name='data'>
<input type='hidden' name='send' value='about' />
<input id='buff' type='hidden' name='buffer' value='' />
</form>
в send'е по умолчанию value='about' (стартовая страница "О нас")
Меню
<li onClick = "changeText('about');">О нас</li>
<li onClick = "changeText('contacts');">Контакты</li>
<li onClick = "changeText('portfolio');">Портфолио</li>
changeText
function changeText(t)
{
if (t != document.data.send.value)
{
defineColors();
xajax_changeContent(t);
new_data = document.data.buffer.value;
setTimeout("setInner('" + new_data + "')", 999);
setTimeout("fade4text (contentTextColor['r'], contentTextColor['g'], contentTextColor['b'], contentBgColor['r'], contentBgColor['g'], contentBgColor['b'], 1500, 35, document.getElementById('content'))", 1000);
fade4text (contentBgColor['r'], contentBgColor['g'], contentBgColor['b'], contentTextColor['r'], contentTextColor['g'], contentTextColor['b'], 1000, 35, document.getElementById('content'));
document.data.send.value = t;
}
}
setInner просто меняет контент в контент-блоке. Меняет, естественно, на те данные, которые были присланы серверным скриптом changeContent. Отложентный вызов функций нужен вот для чего, - на сайте контент меняется следующим образом: текст плавно приобретает цвет фона за одну секунду, далее через 999 мс текст контента меняется на то, что мы получили с сервера и через секунду за полторы секунды плавно из фона появляется "новый" контент. Логика не очень сложная. Но проблема в том что когда я кликаю, к примеру, "Контакты", текст контент-блока "уплывает" в фон, document.data.buffer.value меняется правильно, но "новый" контент не выплывает. Если заново нажать, к примеру, "О нас", через секунду выплывет текст, который был в буффере и теперь в буффере будет уже текст раздела "О нас". Не могу понять в чем "гвоздь" =( Вроде все правильно =(
Если есть желание помочь, - выложу код целиком. Могу выложить сайт на хостинг.