Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AJAX
 
 автор: Lex   (11.02.2008 в 08:02)   письмо автору
 
 

Здравствуйте! Подскажите пожалуйсто как зделать загрузку страниц на аяксе тоесть без перезагрузки окна???

   
 
 автор: elenaki   (11.02.2008 в 10:57)   письмо автору
 
   для: Lex   (11.02.2008 в 08:02)
 

сначала убедитесь, что вам это действительно нужно. я имею ввиду "загрузку" целых
страниц. их же не увидят поисковики. на AJAX'e надо делать небольшие вспомогательные
элементы, отсутствие которых не сильно влияет на понимание сайта пользователями и
роботами.

   
 
 автор: Lex   (11.02.2008 в 11:27)   письмо автору
 
   для: elenaki   (11.02.2008 в 10:57)
 

а нужно ли, что бы в чат поисковики заглядывали? :) мне нужно что бы сообщения из базы без перезагрузки окна выводились! да кстате у меня есть поле ввода логина рядом кнопка типа ПРОВЕРИТЬ ЛОГИН зарегистрирован такой или нет как бы ещё это сделать без рефреша окна? %)

   
 
 автор: Severniy   (11.02.2008 в 11:42)   письмо автору
 
   для: 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();
    }
}

   
 
 автор: Lex   (11.02.2008 в 11:56)   письмо автору
 
   для: Severniy   (11.02.2008 в 11:42)
 

так так спасибо но не понял как с этим обращаться? как подключить то?

   
 
 автор: Severniy   (11.02.2008 в 12:18)   письмо автору
 
   для: 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:22)   письмо автору
 
   для: 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();
?>

   
 
 автор: Lex   (11.02.2008 в 12:40)   письмо автору
 
   для: 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 в 13:01)   письмо автору
 
   для: Lex   (11.02.2008 в 12:40)
 

вот ещё бы результат прикрутить к <div id='result-registration'></div> :) было бы совсем хорошо!

   
 
 автор: Severniy   (11.02.2008 в 13:02)   письмо автору
 
   для: 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_resMYSQL_ASSOC);
        return 
$this->line_select;
    }
}
?>


вообще все классы можно и в одном файле чтобы не инклудить их, но мне так удобнее

   
 
 автор: Severniy   (11.02.2008 в 13:09)   письмо автору
 
   для: 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(); 
    } 


   
 
 автор: Lex   (11.02.2008 в 13:53)   письмо автору
 
   для: Severniy   (11.02.2008 в 13:09)
 

работает но результат одинаковый не зависимо есть в базе такое имя или нет :( и после каждой проверки страницу перезагружать приходится!

   
 
 автор: Severniy   (11.02.2008 в 14:21)   письмо автору
 
   для: 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");

   
 
 автор: Lex   (11.02.2008 в 14:30)   письмо автору
 
   для: 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="Проверить имя" />
эта кнопка не перезагружает страницу!

   
 
 автор: Severniy   (11.02.2008 в 14:45)   письмо автору
 
   для: Lex   (11.02.2008 в 14:30)
 

так по-русски, а с какой целью страницу перезагружать? изначально что надо было? сделать проверку без перезагрузки... если надо после выполнения еще и перезагрузить то:

window.location.reload();


перезагружает данную локацию/фрейм/страницу

   
 
 автор: Lex   (11.02.2008 в 15:00)   письмо автору
 
   для: Severniy   (11.02.2008 в 14:45)
 

да в общем то и не надо её перезагружать только при повторном нажатии на кнопку проверки логина ничего не происходит! а по идее должна выполняться опять проверка!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования