|
|
|
| Здравствуйте! Подскажите пожалуйсто как зделать загрузку страниц на аяксе тоесть без перезагрузки окна??? | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 08:02)
| | сначала убедитесь, что вам это действительно нужно. я имею ввиду "загрузку" целых
страниц. их же не увидят поисковики. на AJAX'e надо делать небольшие вспомогательные
элементы, отсутствие которых не сильно влияет на понимание сайта пользователями и
роботами. | |
|
|
|
|
|
|
|
для: elenaki
(11.02.2008 в 10:57)
| | а нужно ли, что бы в чат поисковики заглядывали? :) мне нужно что бы сообщения из базы без перезагрузки окна выводились! да кстате у меня есть поле ввода логина рядом кнопка типа ПРОВЕРИТЬ ЛОГИН зарегистрирован такой или нет как бы ещё это сделать без рефреша окна? %) | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 11:27)
| |
var xmlHttp = false;
try
{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e2)
{
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined'){
xmlHttp = new XMLHttpRequest();
}
function autorize()
{
poststr = "login="+document.getElementById("login").value;
url='/scripts/autorization.class.php';
xmlHttp.open('POST', url);
xmlHttp.onreadystatechange = resultAutorize;
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", poststr.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(poststr);
}
//Обработка ответа сервера
function resultAutorize() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
if(response == 'ok') {window.location.reload();}
else {alert('Указанные данные не найдены!')}
xmlHttp.abort();
}
}
|
| |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 11:42)
| | так так спасибо но не понял как с этим обращаться? как подключить то? | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 11:56)
| | это код JAVASCRIPT его просто в документ ну или отдельным файлом, далее уже в документе создать поле ввода типа text с id="login" и кнопкой на которую повесить функцию autorize.
ну и остается написать скрипт php сохранить его в файл autorize.class.php. который будет соединяться с базой и смотреть есть такой логин уже или нет... если есть то echo "ok";
если нет то echo "no"; ну а дальше JavaScript обрабатывайте как хотите. | |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 12:18)
| | как-то так должен выглядеть файл autorize.class.php
<?
require_once ("/connect_db.php");
require_once ("/connect_class.php");
class autorize extends connect {
var $login;
var $pass;
var $request;
var $out;
function __construct() {
if (isset($_POST['login'])))
{
parent::__construct();
$this->login = $this->post_check($_POST['login']);
$this->sql_execute("SELECT * FROM user where login='".$this->login."'");
if ($this->num_result() != 0)
{
echo "ok";
}
else
{
echo "no";
}
}
}
function post_check($post_var) {
$this->request = preg_replace("/[^а-яa-z0-9]/i", "", $this->Utf8ToWin($post_var));
return $this->request;
}
function Utf8ToWin($fcontents) {
$this->out = $c1 = '';
$byte2 = false;
for ($c = 0;$c < strlen($fcontents);$c++) {
$i = ord($fcontents[$c]);
if ($i <= 127) {
$this->out .= $fcontents[$c];
}
if ($byte2) {
$new_c2 = ($c1 & 3) * 64 + ($i & 63);
$new_c1 = ($c1 >> 2) & 5;
$new_i = $new_c1 * 256 + $new_c2;
if ($new_i == 1025) {
$out_i = 168;
} else {
if ($new_i == 1105) {
$out_i = 184;
} else {
$out_i = $new_i - 848;
}
}
$this->out .= chr($out_i);
$byte2 = false;
}
if (($i >> 5) == 6) {
$c1 = $i;
$byte2 = true;
}
}
return $this->out;
}
}
$autorize = new autorize();
?>
|
| |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 12:22)
| | что тоне хочет ... а точнее работает но всегда указанные данные не найдены! это что за переменные
var $login;
var $pass;
var $request;
var $out;
|
ещё вижу connect_class.php там то чё должно быть? у меня коннект к базе вот такой
$dbconnect = @mysql_connect($DBHOST,$DBUSER,$DBPASS);
if (!$dbconnect) // Если дескриптор равен 0 соединение не установлено
{
echo("<P>В настоящий момент сервер базы данных не доступен, поэтому
корректное отображение страницы невозможно.</P>");
exit();
}
if (!@mysql_select_db($DBNAME, $dbconnect))
{
echo( "<P>В настоящий момент база данных не доступна, поэтому
корректное отображение страницы невозможно.</P>" );
exit();
}
| и всё :) | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 12:40)
| | вот ещё бы результат прикрутить к <div id='result-registration'></div> :) было бы совсем хорошо! | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 12:40)
| | файл connect_db.php
<?
class vars
{
var $sql_user="root";
var $sql_pass="";
var $sql_base="dbname";
var $sql_host="localhost";
}
?>
|
файл connect_class.php
<?
class connect extends vars
{
var $conn_id;
var $sql_err;
var $sql_res;
var $line_select;
var $num_rows;
function __construct()
{
$this->conn_id=mysql_connect($this->sql_host,$this->sql_user,$this->sql_pass);
mysql_select_db($this->sql_base);
}
function sql_close()
{
mysql_close($this->conn_id);
}
function sql_execute($sql_query)
{
$this->sql_res=mysql_query($sql_query,$this->conn_id);
$this->sql_err=mysql_error();
}
function num_result()
{
$this->num_rows = mysql_num_rows($this->sql_res);
return $this->num_rows;
}
function fetch_array()
{
$this->line_select=mysql_fetch_array($this->sql_res, MYSQL_ASSOC);
return $this->line_select;
}
}
?>
|
вообще все классы можно и в одном файле чтобы не инклудить их, но мне так удобнее | |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 13:02)
| | ну а чтобы результат прикрутить
там на JS функция есть
function resultAutorize() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
if(response == 'ok') {window.location.reload();}
else {alert('Указанные данные не найдены!')}
xmlHttp.abort();
}
}
|
ее надо изменить
function resultAutorize() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
if(response == 'ok') {document.getElementById("DIV_ID").innerHTML = 'Сюда пишите что хотите';}
else {document.getElementById("DIV_ID").innerHTML = 'Сюда пишите что хотите';}
xmlHttp.abort();
}
}
|
| |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 13:09)
| | работает но результат одинаковый не зависимо есть в базе такое имя или нет :( и после каждой проверки страницу перезагружать приходится! | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 13:53)
| | ну могу посоветовать самому переписать скрипт формирующий ответ, то есть файл php без классов если с ними проблема, я думаю не сложно написать проверку есть в базе логин переданный через POST, единственное что надо учитывать что Ajax передает данные в кодировке KOI-8 (если не ошибаюсь), поэтому надо переменную обязательно прогнать через функцию перекодировки, или в базе кодировку менять если она отличается... а что касается того что перезагружать надо страницу, это подозрительно, функция должна вызываться всегда по событию OnClick. Сколько раз нажмете столько раз и передадутся данные
P.S. возможно проблема еще вот в чем, если логин на русском то может не работать. тогда в php файл в самом начале лучше написать следующее
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-type: text/html; charset=windows-1251");
header("Pragma: no-cache");
|
| |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 14:21)
| | да действительно странно но
<input style="height:18px; font-family:tahoma; font-size:11px; border:1px solid #DFDFDF; background: #FFFFFF"
title="Проверить доступность логина для регистрации"
OnClick="autorize(); return false;" type="button"
value="Проверить имя" />
| эта кнопка не перезагружает страницу! | |
|
|
|
|
|
|
|
для: Lex
(11.02.2008 в 14:30)
| | так по-русски, а с какой целью страницу перезагружать? изначально что надо было? сделать проверку без перезагрузки... если надо после выполнения еще и перезагрузить то:
window.location.reload();
|
перезагружает данную локацию/фрейм/страницу | |
|
|
|
|
|
|
|
для: Severniy
(11.02.2008 в 14:45)
| | да в общем то и не надо её перезагружать только при повторном нажатии на кнопку проверки логина ничего не происходит! а по идее должна выполняться опять проверка! | |
|
|
|