Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Обработка форм с помощью Ajax (https://forum.antichat.xyz/showthread.php?t=61801)

n3m0 14.02.2008 17:27

Обработка форм с помощью Ajax
 
Собственно вопрос: У меня есть форма. при нажатии на кнопку идёт обработка формы на сервере, потом тудаже вместо текущей формы загружаются другие данные(ещё одна форма/ и так несколько раз). Т.е у меня пару формочек, и пользователь должен их заполнить по очерёдно.

Перегуглился и толкового не нашел.


А ещё. при обработке формы нужно чтобы выводился рисунок(какбы loading image) (пример на сайте хека.ру)

Знающих прошу показать пример, ибо от Ajax'a далёк

Isis 14.02.2008 18:04

Хек хек!

index.php
PHP код:

<!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" xml:lang="en" lang="en">
<head>
    <title>The Mafia - Undeground Security Private Community</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <script src="http://www.xeka.ru/js/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">   function whois(domain)
   {
    $.post("whois.php", { domain: document.getElementById("domain").value },
   function(data)
   {
        document.getElementById("res").innerHTML = data;
   });
   }
</script>
    <script type="text/javascript">
    $(function(){    
        $('<img id="test" src="images/indicator.gif"/>') 
        .ajaxStart(function() {$(this).show();}) 
        .ajaxStop(function() {$(this).hide();}) 
        .appendTo('#res'); 
    }); 
    </script>
</head>
<body>
<?php
echo '<div id="main">';

echo 
'<form method="post" enctype="multipart/form-data"><table>
    <tr><td>Enter domain name:</td><td><input type="text" id="domain" /></td></tr>
    <tr><td>&nbsp;</td><td align="right"><input type="button" value="Lookup" onclick="whois()" /></td></tr>
    </table></form>'
;

echo 
'<div id="res"></div>';
echo 
'</div>';
?>

whois.php
PHP код:

<?php
<?php
    error_reporting
(0);

    if(
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
    {
        function 
encode($str$type)
        {
            static 
$conv='';
            if (!
is_array $conv ))
            {
                
$conv=array ();
                for(
$x=128$x <=143$x++ )
                {
                  
$conv['utf'][] = chr(209).chr($x);
                  
$conv['win'][] = chr($x+112);
                }

                for( 
$x=144$x <=191$x++ )
                {
                       
$conv['utf'][] = chr(208).chr($x);
                       
$conv['win'][] = chr($x+48);
                }

                
$conv['utf'][] = chr(208).chr(129);
                
$conv['win'][] = chr(168);
                
$conv['utf'][] = chr(209).chr(145);
                
$conv['win'][] = chr(184);
             }
             if( 
$type=='w' )
                  return 
str_replace $conv['utf'], $conv['win'], $str );
             elseif( 
$type=='u' )
                  return 
str_replace $conv['win'], $conv['utf'], $str );
             else
                return 
$str;
        }

        function 
whois($domain)
        {
            
$dom explode("."$domain);

            if(
substr($domain04) == 'www.' && count($dom) >= 3)
            {
                
$domain substr($domain,4);
            }

            
$zone    strtolower($dom[count($dom) - 1]);

            if(!empty(
$zone))
            {
                
$error 0;
                if(
in_array($zone, array('de')))
                {
                    
$server "whois.denic.de";
                }
                else
                if(
in_array($zone, array('nl')))
                {
                    
$server "whois.domain-registry.nl";
                }
                else
                if(
in_array($zone, array('ru''su')))
                {
                    
$server "whois.ripn.net";
                }
                else
                if(
in_array($zone, array('com''net''edu')))
                {
                    
$server "whois.crsnic.net";
                }
                else
                if(
in_array($zone, array('org')))
                {
                    
$server "whois.publicinterestregistry.net";
                }
                else
                if(
in_array($zone, array('info')))
                {
                    
$server "whois.afilias.net";
                }
                else
                if(
in_array($zone, array('biz')))
                {
                    
$server "whois.neulevel.biz";
                }
                else
                if(
in_array($zone, array('cc')))
                {
                    
$server 'ccwhois.verisign-grs.com';
                }
                else
                if(
in_array($zone, array('nu')))
                {
                    
$server 'whois.nic.nu';
                }
                else
                if(
in_array($zone, array('us')))
                {
                    
$server 'whois.nic.us';
                }
                else
                if(
in_array($zone, array('ws')))
                {
                    
$server 'whois.website.ws';
                }
                else
                if(
in_array($zone, array('tv')))
                {
                    
$server 'tvwhois.verisign-grs.com';
                }
                else
                if(
in_array($zone, array('ua')))
                {
                    
$server 'whois.net.ua';
                }
                else
                {
                    
$error 2;
                }
            }
            else
            {
                
$error 1;
            }

            if(!empty(
$domain) && $error == 0)
            {
                
$fp fsockopen($server43, &$errno, &$errstr30);
                if(!
$fp)
                {
                    
$output $errstr." (".$errno.")<br>\n";
                }
                else
                {
                    
fputs($fp$domain."\n");
                    while(!
feof($fp))
                    {
                        
$output $output ereg_replace("\t"" "fgets($fp,128)) . "<BR>\n";
                    }
                    
fclose($fp);
                }
                
$output str_replace("<BR>\n"""$output);
                return 
"<textarea rows='20' cols='60'>".$output."</textarea>";
            }
            else
            if(
$error == 2)
            {
                return 
$output "<b>Ошибка:</b><br />1) Неверно задана зона <b>".htmlspecialchars(encode($zone))."</b> для домена ".htmlspecialchars(encode($domain))."<br/>2) В нашей базе нет информации по вашему домену<br>\n";
            }
            else
            if(
$error == 1)
            {
                return 
$output "Вы не ввели домен";
            }
        }

        if(
$_POST['domain'])
        {
            if(empty(
$_POST['domain']))
            {
                echo 
"<div align='center'><div class='error'>Заполните поле</div></div>";
            }
            else
            {
                echo 
whois(encode($_POST['domain']));
            }
        }
    }
?>

http://www.xeka.ru/images/indicator.gif

DIAgen 14.02.2008 18:21

Isis если используешь jquery.js, изучи его функции:) (правда я только не давно сам изучил его полностью...)
PHP код:

<script src="http://www.xeka.ru/js/jquery.js" type="text/javascript"></script>
    <
script type="text/javascript">  
    function 
whois(domain) {
    $.
post("whois.php", { domain: $('#domain').attr('value') },
    function(
data) {
        $(
'#res').empty().append(data);
   });
   }
</
script


n3m0 14.02.2008 18:35

Спасибо Isis. я и надеялся на твою помощь :)

DIAgen, спасибо за исправление


Теперь такой вопрос: Форма обрабатывается. Но нужно сделать так. чтобы когда форма обработалась, в <div id="main"> помещалась ещё одна форма. И так несколько раз/ Т,е старая форма убиралась и помещалась новая

Там нужно использовать innerHTML для замены HTML кода?
Покажите пример

gibson 14.02.2008 18:41

еще посмотри тут
http://myjoomla.ru/demo_ru/demonstratie.php

и вот тут есть примеры для
Цитата:

Т.е у меня пару формочек, и пользователь должен их заполнить по очерёдно.
http://xajaxproject.org/download.php

Isis 14.02.2008 18:44

DIAgen, мне больше понятен мой код и удобнее для меня..
На время работы никак влияет что означает что знать мне его более не надо

DIAgen 14.02.2008 18:53

Где то приблизительно так
PHP код:

<script type="text/javascript">  
$(
'#main').empty().append('<form><!-- Сдесь твоя новая форма--></form>'); 
</
script

Этот скрипт вставь в текст который возвращается при AJAX

DIAgen 14.02.2008 18:57

Цитата:

Сообщение от Isis
DIAgen, мне больше понятен мой код и удобнее для меня..
На время работы никак влияет что означает что знать мне его более не надо

Ну это твое дело, просто сначало не привычно, зато потом на много лучше и быстре делается все:)

простой пример
PHP код:

document.getElementById("domain").value 

или так...
PHP код:

$('#domain').attr('value'



Время: 10:40