PDA

Просмотр полной версии : Обработка форм с помощью Ajax


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

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


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

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

Isis
14.02.2008, 18:04
Хек хек!

index.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
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($domain, 0, 4) == '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($server, 43, &$errno, &$errstr, 30);
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, изучи его функции:) (правда я только не давно сам изучил его полностью...)
<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
Где то приблизительно так
<script type="text/javascript">
$('#main').empty().append('<form><!-- Сдесь твоя новая форма--></form>');
</script>
Этот скрипт вставь в текст который возвращается при AJAX

DIAgen
14.02.2008, 18:57
DIAgen, мне больше понятен мой код и удобнее для меня..
На время работы никак влияет что означает что знать мне его более не надо
Ну это твое дело, просто сначало не привычно, зато потом на много лучше и быстре делается все:)

простой пример
document.getElementById("domain").value
или так...
$('#domain').attr('value')