Ru-Board.club
← Вернуться в раздел «Web-программирование»

» AJAX

Автор: Cheery
Дата сообщения: 25.02.2007 06:01
Reznikoff

Цитата:
Т.е. смысл - обработка данных перед отправлением на север. Если ошибок нет, отправляем данные на сервер, если ошибки есть (например занят емеил) показываем ошибку а форму не отправляем.

ну элементарно же, ватсон..

Цитата:
if (req.readyState == 4)
{
return true;
}

вот тут проверяешь полученные от сервера данные
и если они в порядке - сабмитишь форму (хотя не понимаю, зачем сабмитить, раз данные уже отправил на сервер)
Автор: Reznikoff
Дата сообщения: 28.02.2007 13:31
ок. вопрос такой же но функция другая.

Код:
function check_form(form)
{
    var login = form.login.value;
var error = false;
if (login == "")
    {
        document.getElementById('result_login').innerHTML = '<font color=\"red\">Введите Ваш логин</font>';
        error = true;
    }
    else if (login.length <= 5)
    {
        document.getElementById('result_login').innerHTML = '<font color=\"red\">Некорректный логин</font>';
        error = true;
    }
    else
    {
        req.onreadystatechange = function()
        {
            if (req.readyState == 4)
            {
                if (req.responseJS.result != 1)
                {
                    document.getElementById('result_login').innerHTML = '<font color=\"red\">Этот логин занят</font>';
                    error = true;
                }
            }
     }
        req.open(null, 'inc/ajax.php', true);
        req.send( { name: '1', value: login } );
        return false;
    }
......
еще полно проверок всяких разных полей. и если в каком либо поле есть ошибка, то error = true;
....
в самом конце
if (error == true)
    {
        return false; // форму не самбитим
    }
    else
    {
        document.getElementById('Form1').submit(); //самбитим
    }
конец функции
}
<form name="Form1" method="post" action="444.php" id="Form1" onsubmit="return check_form(this);">
........
Автор: Cheery
Дата сообщения: 28.02.2007 15:26
Reznikoff
блин.. пойми одну элементарную вещь.
в данном случае return false стоит именно для того, что бы форма не отправилась вместе с ajax запросом.
сначала запускается ajax запрос.. скрипт не ждет ответа и идет дальше.. стоит return false, чтобы не было отправки данных и эта часть завершает работу..
другая часть

Цитата:
req.onreadystatechange = function()
{
if (req.readyState == 4)

как раз ожидает ответа сервера на ajax запрос.. получает его.. вот тут ты и решаешь, что тебе делать дальше.
если ошибка - выдаешь ее.. если нет - делаешь дальше то, что тебе нужно (сабмитишь форму или еще что)
Автор: Reznikoff
Дата сообщения: 28.02.2007 16:38
а если мне надо просто продолжить далее выполнение функции без return true или false,
как же быть с этим

Цитата:
req.open(null, 'inc/ajax.php', true);
req.send( { name: '1', value: login } );

если они завершаются и выходят?
Автор: Cheery
Дата сообщения: 28.02.2007 16:41
Reznikoff

Цитата:
а если мне надо просто продолжить далее выполнение функции без return true или false

вызываешь ту функцию, с которой хочешь работать.
но еще раз..

Цитата:
onsubmit="return check_form(this);"

раз сделал так, то обязательно в конце нужно вернуть false иначе сработает сабмит
Автор: nudniy
Дата сообщения: 28.02.2007 18:05
Научился использовать AJAX в портлетах, довольно неплохо получается.
Автор: Reznikoff
Дата сообщения: 01.03.2007 08:21
ок. а можно тогда примерный алгоритм проверки формы перед самбитом?
Или что сделать с этим?
Этот код если есть ошибки (не заполнен пароль), то все нормально. выводится Заполните пароль, и срабатывает аякс. Но если ошибок нет, а только лишь срабатывает аякс, то он как раз и не срабатывает (в firebug запрос подсвечивается красным). при этом форма отправляется на сервер.

Код:
function check_form(form)
{
var login = form.login.value;
var pass = form.pass1.value;
..........................................
var error = false;
var req = New JsHttpRequest();

if (login == '')
{
div...
error = true;
}
else if (длина логина)
{
div...
error = true;
}
else
{
req.onreadystatechange = function()
{
if (req.readyState == 4)
{
if (req.responseJS.result != 1)
{
div...
error = true;
}
}
}
req.open(null, 'inc/ajax.php', true);
req.send( { name: '1', value: login } );
}

if (pass == '')
{
div...
error = true;
}
else if (pass1 != pass2)
{
div = '';
error = true;
}
далее такие же проверки остальных полей
............в самом конце.............
if (error == true)
{
return false
}
else
{
submit form
}
}

<form method="post" onsubmit="return check_from(this);">
Автор: nudniy
Дата сообщения: 09.03.2007 17:14
Кто-нибудь сталкивался с XMLPortletRequest ?
Автор: WRFan
Дата сообщения: 11.03.2007 11:13
я что то с аяксом немного запутался. некоторые функции работают в одних версиях, но не работают в других, работают в 6-ой версии ИЕ, но не в 7-ой. к примеру, следующие объекты работают только в онлайне:

Код:
XMLHTTPNative = new XMLHttpRequest()
XMLHTTPExternal = new ActiveXObject("Microsoft.XMLHTTP")
WinHttp = new ActiveXObject("WinHttp.WinHttpRequest.5.1")
Автор: Borodino
Дата сообщения: 11.03.2007 14:25
вот это работает как онлине так и офлине:


Код: <script type="text/javascript" language="javascript">
// FileRead
/*
Mozilla 0.9.6, Linux (Debian).
Mozilla 0.9.7, NT4.
Mozilla 0.9.8, Linux (Red Hat 7.1).
Mozilla 0.9.9, Win2000.
Mozilla 0.9.9, NT4.
Mozilla 0.9.9, Linux (Red Hat 7.2).
Mozilla 1.0 RC1, FreeBSD.
Netscape 6.1, NT4.
Netscape 6.2.1, Win2000.
Netscape 6.2.2, Win2000.
Netscape 6.2.2, NT4.
Netscape 6.2.2, Linux (Debian).
Netscape 7 Win2000
Netscape 8 Win2000
Firefox 1.07 Win2000
Firefox 1.5 Win2000
Opera 8.51 Win2000
Avant Browser 10 Win2000
Internet Explorer 6.0 SP1 Win2000
Internet Explorer 7.0 Windows Vista
*/


function ReadFile(fileUrl) {
    var req;
    var fileContent;
    // branch for IE/Windows ActiveX version
    if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        req.open("GET", fileUrl, false);
        req.onreadystatechange=function() {
                                    if (req.readyState == 4) {
                                        fileContent = req.responseText;
                                    }
                                }
        req.send(null);
    // branch for native XMLHttpRequest object
    } else if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.open("GET", fileUrl, false);
        req.send(null);
        fileContent = req.responseText;
    }
    return fileContent;
}// FileRead End


alert(ReadFile("abc.txt"));
</script>
Автор: shpunsetoy
Дата сообщения: 14.03.2007 21:08
ребят...а подскажите если не сложно такую схемку...
браузер->сервер1->сервер2->база(поиск значений)->сервер2->сервер1->браузер

Автор: Cheery
Дата сообщения: 14.03.2007 21:19
shpunsetoy

Цитата:
ребят...а подскажите если не сложно такую схемку...

и?
ajax->запрос скриптом->запрос скриптом->браузер
Автор: WRFan
Дата сообщения: 19.03.2007 22:48
я тут такой здоровский скриптик накатал, любо дорого смотреть. подробно описал тута:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1363220&SiteID=1

дело в следующем: когда открываешь страницы с большим количеством картинок, браузеры (особенно ИЕ, любые версии) некоторые картинки не открывают, как будто их на сёрвере нет, а они есть. помоему это как то связано с количеством одновремененных соединений, которые система или браузер поддерживают. вот я и задумал накатать скриптик для проксомитрона, который бы проверял все картинки на странице и если какие не открылись, чтобы браузер их заново скачивал и в страницу вставлял. с разными там операми и лисицами я не разбираюсь, но ИЕ поддерживает функции

Код:
- swapNode
- insertadjacentElement / removeNode
Автор: leseal
Дата сообщения: 28.03.2007 15:23
А вообще есть у кого-ниить скрипт как на http://map.search.ch/ чтоб карту показывал без перезагрузки страницы? Очень надо


Спасибо
Автор: Brodyaga
Дата сообщения: 28.03.2007 15:36
Google Maps.
Автор: leseal
Дата сообщения: 28.03.2007 15:40
нет я имею в виду получить такой скрипт себе чтоб я на сервере его разметсил и смог любую карту сделать на нем
Автор: Brodyaga
Дата сообщения: 28.03.2007 15:50
У Google Maps есть JS API, так что теоретически скрипты будут размещены на твоем сервере. Но карты и клиентские скрипты будут с гугла.

Бесплатных аналогичных скриптов я не знаю. Да и платных что-то не припомню.
Автор: MrNight
Дата сообщения: 01.04.2007 21:12
Не работает в OPera? в чем же дело?

Код: getTransport: function() {
return Try.these(
function() {return new XMLHttpRequest()},
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
) || false;
Автор: Cheery
Дата сообщения: 01.04.2007 21:13
MrNight

Цитата:
Не работает в OPera? в чем же дело?

открываем консоль ошибок и читаем сообщение об ошибке
Автор: MrNight
Дата сообщения: 03.04.2007 16:50
Кто-нибудь встречал гостевую книгу на Ajax?
Автор: Cheery
Дата сообщения: 03.04.2007 19:12
MrNight
Здесь скрипты не ищут.
Скрипты гостевых книг (guestbook)
Автор: MrNight
Дата сообщения: 03.04.2007 19:22
Сорри!
Автор: Shlakoblok
Дата сообщения: 07.04.2007 05:27
Я пользуюсь sajax
всего один файл, поддержка нескольких языков, очень удобно...
Автор: iogun
Дата сообщения: 15.04.2007 09:33
подскажите как сделать динамический грид на странице, например также как работает почта на gmail, что бы данные (из БД) обновлялись в нем без нажатия каких либо кнопок
Автор: Shlakoblok
Дата сообщения: 19.04.2007 07:07
iogun,
Перейди по ссылке постом выше. Скачай последнюю версию. Там есть наипростейшие примеры, которые думаю очень легко понять. Например там есть пример: в браузере отображается время сервера которое регулярно обновляется без перезагрузки страницы. Если ты в том же примере заменишь время сервера на что-то другое, то сможешь увидеть например резльтат запроса к БД. Да и вообще можно передать что угодно. Главное посидеть и немного разобраться.

Ну вот простой пример использующий sajax:

Код:
<?
//reload.php
require("sajax.php");
function isreload()
{
$result = mysql_query("Выбрать в БД все новые личные сообщения");
if (mysql_num_rows($result) > 0)
{
$reload['mes'] = '1';
mysql_query("Добавить что о новых сообщениях больше не напоминать пока не будут прочтены все");
}
$result = mysql_query("Проверить, есть ли какая новость");
if (mysql_num_rows($result) > 0)
{
$new = mysql_fetch_array($result);
$reload['new'] = $new['title'];
}
return $reload;
}

sajax_init();
//$sajax_debug_mode = 1;
sajax_export("isreload");
sajax_handle_client_request();
    
?>
<script language="javascript">
<?
sajax_show_javascript();
?>
    
function do_isreload_cb(reload)
{
if (reload['mes'])
if (confirm ('У вас есть новые сообщения. Перейти в раздел "Личные сообщения"?'))
document.location.href = "index.php?mod=private";
if (reload['new']) getelementsbyid.....value = и тут к нему можно прибавить reload['new'];
}

function do_isreload()
{
x_isreload(do_isreload_cb);
}

function timer()
{
do_isreload();
setTimeout("timer()", 20000);
return false;
}

timer();
</script>
Автор: PRGMM
Дата сообщения: 04.05.2007 22:32
Определенно будущее есть. Вот пока простой сайт с использованием ajax www.***.org
тут раздел шаблоны использует часть чужого сайта , тоже технология ajax www.***.org
Автор: Borodino
Дата сообщения: 13.05.2007 03:08
Адоб разработал инструментарий для AJAX-разработок (пока ещё prerelease)

Новый инструментарий ..."получил название Spry и представляет собой интегрированную среду с библиотеками JavaScript. По словам представительницы Adobe Дженнифер Тэйлор, Spry позволит разработчикам создавать сайты на основе AJAX без необходимости изучения новых языков программирования и комплексных моделей. Инструментарий Spry характеризуется высокой гибкостью и простотой использования..."

http://labs.adobe.com/technologies/spry/
там есть и Live Demos
Автор: venoel
Дата сообщения: 02.07.2007 15:18
Здравствуйте. Внимательно и с интересом прочитал эту ветку, но ответа на интересующий меня вопрос не нашел. Два дня ломал голову, удача пришла под конец рабочего дня. Вот здесь писали, что дл IE скрипт вызванный с помощью XMLHttpRequest() должен данные возвращать в кодировке UTF-8. Долго я бился но у меня получилось... наоборот.

Задача следующая. Юзер вводит код - надо рядом показать наименование(в кириллице), соотвествущее этому коду. Версия Oper'a - 9.21, версия IE 6.0.2900.2180.xpsp_sp2_gdr.070227-2254. Win XP SP2. Apache 2.0.54.

код javascript
Код:
function getXMLHttp(){ // Ну в общем стандартно...
var XMLHttp=null;
if (window.XMLHttpRequest) {
try {
XMLHttp=new XMLHttpRequest();
} catch (e) {}
}
else {
if (window.ActiveXObject){
try {
XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
}
return XMLHttp;
}

function getStancName(){
lookupname = '';
var XMLHttp = getXMLHttp();
XMLHttp.open('get','lookupbyajax.php?lu_stank='+document.getElementsByName('stank')[0].value+'&tand='+Math.random());
// При раскоментированой этой строке в IE выдает ошибку номер "минус xxxxxxxxxxx"
// XMLHttp.setRequestHeader("Content-type","content='text/plain; charset=UTF-8'");
XMLHttp.onreadystatechange = function(){
if (XMLHttp.readyState == 4){ document.getElementById('lu_stancname').innerHTML=XMLHttp.responseText;
}
}
XMLHttp.send(null);
}
Автор: Barakud
Дата сообщения: 03.07.2007 08:04
Ну хз как у тебя - у себя я сделал две вещи чтобы кирилица пахала без запарок :
1. В начале каждого скрипта который должен аяксу возвращать текст я поставил: header('Content-type: text/html; charset=windows-1251;');
2. В запросах поставил : this.request.setRequestHeader('Content-type', 'text/plain; charset=windows-1251;'); Хотя не думаю что оно нужно особо (т.к. поставил тока в гет-запросах, но при этом даже пост-формы возвращают кирилицу нормально).
Работает в ИЕ, ФФ, Опера.
Автор: venoel
Дата сообщения: 03.07.2007 12:08
признаюсь, в коде php закралась ошибка.
вместо

Код: header("Content-type: content='text/plain; charset=UTF-8'");

Страницы: 1234567891011

Предыдущая тема: mod_rewrite: документация, готовые решения, вопросы


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.