Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » AJAX

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Открыть новую тему     Написать ответ в эту тему

TBFG



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В этой теме хочется услышать мнения людей о технологии AJAX. В особенности интересно, если кто-то ее реализовал в действующих проектах. По моему технология заслуживает доверия, но естевственно, пойдет ли она в массы, зависит только от нас - т.е. WEB - разработчиков.


 
Ссылки по теме.

Ajax - Википедия.  
Технология, которая перевернёт веб
Сверхдинамичные веб-интерфейсы
Subsys_JsHttpRequest: динамическая подкачка данных без перезагрузки страницы
xAJAX на NoNaMe
Неплохой обзор движка xAJAX; в статье приведены нагляные примеры.
 
AJAX Matters - Asynchronous JavaScript and XML and XMLHTTP development information
Dynamic HTML and XML: The XMLHttpRequest Object
Client/Server Gateway JSAPI
Using Perl to do AJAX
 
Ajax programming community
[05.04.06] HTTP Streaming

Всего записей: 584 | Зарегистр. 10-07-2004 | Отправлено: 18:30 22-08-2005 | Исправлено: 6epcepk, 21:07 18-04-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Reznikoff

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

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

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

вот тут проверяешь полученные от сервера данные  
и если они в порядке - сабмитишь форму (хотя не понимаю, зачем сабмитить, раз данные уже отправил на сервер)


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:01 25-02-2007 | Исправлено: Cheery, 04:23 26-02-2007
Reznikoff

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ок. вопрос такой же но функция другая.

Код:
 
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);">
........
 

такая же фигня. только после отработки конкретно это функции мне надо не форму сабмитить (или не сабмитить) а работать дальше, потомучто ниже идут следущие проверки других полей.
в итоге если удаленная проверка ошибок не выдает (и как бы ошибок нет вообще), то форма все равно не самбитится, потому что (насколько я понял)  
req.send( { name: '1', value: login } );
return false; <---из за этого
если же убрать этот ретурн фолс, то банально не отправляются данные, тоесть не работает аякс. как в прошлый раз.

Всего записей: 62 | Зарегистр. 18-07-2005 | Отправлено: 14:31 28-02-2007 | Исправлено: Reznikoff, 14:38 28-02-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Reznikoff
блин.. пойми одну элементарную вещь.
в данном случае return false стоит именно для того, что бы форма не отправилась вместе с ajax запросом.
сначала запускается ajax запрос.. скрипт не ждет ответа и идет дальше.. стоит return false, чтобы не было отправки данных и эта часть завершает работу..  
другая часть

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

как раз ожидает ответа сервера на ajax запрос.. получает его.. вот тут ты и решаешь, что тебе делать дальше.
если ошибка - выдаешь ее.. если нет - делаешь дальше то, что тебе нужно (сабмитишь форму или еще что)

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 16:26 28-02-2007
Reznikoff

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
а если мне надо просто продолжить далее выполнение функции без return true или false,
как же быть с этим

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

если они завершаются и выходят?

Всего записей: 62 | Зарегистр. 18-07-2005 | Отправлено: 17:38 28-02-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Reznikoff

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

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

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

раз сделал так, то обязательно в конце нужно вернуть false иначе сработает сабмит


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 17:41 28-02-2007
nudniy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Научился использовать AJAX в портлетах, довольно неплохо получается.

Всего записей: 87 | Зарегистр. 20-11-2004 | Отправлено: 19:05 28-02-2007
Reznikoff

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ок. а можно тогда примерный алгоритм проверки формы перед самбитом?
Или что сделать с этим?
Этот код если есть ошибки (не заполнен пароль), то все нормально. выводится Заполните пароль, и срабатывает аякс. Но если ошибок нет, а только лишь срабатывает аякс, то он как раз и не срабатывает (в 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);">      
 

Всего записей: 62 | Зарегистр. 18-07-2005 | Отправлено: 09:21 01-03-2007
nudniy



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь сталкивался с XMLPortletRequest ?

Всего записей: 87 | Зарегистр. 20-11-2004 | Отправлено: 18:14 09-03-2007 | Исправлено: nudniy, 11:29 13-03-2007
WRFan



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я что то с аяксом немного запутался. некоторые функции работают в одних версиях, но не работают в других, работают в 6-ой версии ИЕ, но не в 7-ой. к примеру, следующие объекты работают только в онлайне:

Код:
 
XMLHTTPNative = new XMLHttpRequest()
XMLHTTPExternal = new ActiveXObject("Microsoft.XMLHTTP")
WinHttp = new ActiveXObject("WinHttp.WinHttpRequest.5.1")
 

 
единственный объект, работающий с ms-its:, mk:@MSITStore:, file:// и Microsoft Document Explorer (ms-help://) протоколами в оффлайне, этот:
 

Код:
 
MSXML = new ActiveXObject("Msxml2.XMLHTTP.6.0");
 

 
под ИЕ6 все работают в оффлайне, кроме встроенного, конечно, его же в ИЕ6 нет.
 
скажите, а какая разница между Microsoft.XMLHTTP и Msxml2.XMLHTTP.6.0? я чего то никак не разберусь. это один и тот же activex объект?

Всего записей: 5275 | Зарегистр. 25-11-2002 | Отправлено: 11:13 11-03-2007
Borodino

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот это работает как онлине так и офлине:
 

Код:
<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>

Всего записей: 585 | Зарегистр. 17-08-2006 | Отправлено: 14:25 11-03-2007
shpunsetoy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ребят...а подскажите если не сложно такую схемку...
браузер->сервер1->сервер2->база(поиск значений)->сервер2->сервер1->браузер
 

Всего записей: 1 | Зарегистр. 11-02-2006 | Отправлено: 21:08 14-03-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shpunsetoy

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

и?  
ajax->запрос скриптом->запрос скриптом->браузер

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:19 14-03-2007
WRFan



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я тут такой здоровский скриптик накатал, любо дорого смотреть. подробно описал тута:
 
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1363220&SiteID=1
 
дело в следующем: когда открываешь страницы с большим количеством картинок, браузеры (особенно ИЕ, любые версии) некоторые картинки не открывают, как будто их на сёрвере нет, а они есть. помоему это как то связано с количеством одновремененных соединений, которые система или браузер поддерживают. вот я и задумал накатать скриптик для проксомитрона, который бы проверял все картинки на странице и если какие не открылись, чтобы браузер их заново скачивал и в страницу вставлял. с разными там операми и лисицами я не разбираюсь, но ИЕ поддерживает функции  

Код:
 
- swapNode
- insertadjacentElement / removeNode
 

 
это нужно, потому что ИЕ не поддерхивает релоад имедж объектов без релоада документа в целом. я просто напросто приказал ИЕ менять картинку на самое себя! лол. звучит смешно, но работало на все 100 под ИЕ6.  
 
а вот в ИЕ7 перестало. он не качает картинку заново с сервака, этакие злюки эти микрозофтцы, всё портят. поэтому я придумал следующее - качаем картинки через XMLHttp или WinHttp объекты на харддиск и потом меняем картинку не на себя саму, а на скаченную картинку, т.е. с человеческой точки зрения это конечно та же самая картинка, но браузер -  он же дурак, не разбирается.
 
накатал скрипт, не работает. в чём дело? а дело в следующем: эти вредные микрозофтцы полностью перекрыли доступ ко всем функциям ИЕ в интернет зоне (зона номер 3 на микрозофтском слэнге). и главное, никакой возможности включить эти функции, т.е. включить их можно через gpedit, но ИЕ их спокойно игнорирует, находясь в интернет зоне.
 
не говоря уж о том, что activex объекты для записи на локальный харддиск не являются безопасными, а разрешать использование небезопасных объектов в интернет зоне очень глупо, совсем не объйзательно давать доступ к shell.application или к WMI объектам каким то неизвестным сайтам, так в два счёта реестр удалят, пикнуть не успеешь.
 
в общем, облазив весь интернет и отмониторив запросы ИЕ к реестру, мне удалось найти решение. надо просто напросто обхитрить  ИЕ и внести все интернет сайты, т.е. http и https протоколы в зону доверенных сайтов (зона номер 2). потом так настроить эту зону через gpedit, чтобы опасные activex и .NET объекты автоматически не использовались и не скачивались. в этой зоне ИЕ действительно следует указаниям пользователя, т.е. например если я даю разрешение на скачивание файлов на харддиск через activex, то ИЕ и будет это делать, а в интернет зоне он моё разрешение просто игнорирует, мерзавец этакий.
 
вот в общем сначала скрипт (на jscript-е) и дополнительные настройки для реестра, которые переносят интернет зону ПОЛНОСТЬЮ в зону доверенных сайтов, а также маркируют ADODB.Stream как безопасный объект. хотя, он совсем и небезопасный, но я готов пойти на определённый риск, лишь бы мне дали возможность спокойно программировать. устал от permission denied жалоб
 

Код:
 
function IE_IMG_Bug()
{  
var theImages_length = document.images.length
if (theImages_length > 0)
{  
ADOStream = new ActiveXObject("ADODB.Stream");
MSXML = new XMLHttpRequest()
//MSXML = new ActiveXObject("WinHttp.WinHttpRequest.5.1")
//MSXML = new ActiveXObject("Msxml2.XMLHTTP.6.0");
var theImages = document.body.getElementsByTagName("IMG");
for (var theImagesCount = 0; theImagesCount < theImages_length; theImagesCount++)  
{  
if (theImages[theImagesCount].fileSize < 0)
{  
MSXML.open ("GET", theImages[theImagesCount].src, false)
MSXML.send();
ADOStream.type = 1  
ADOStream.Open  
ADOStream.Write (MSXML.responseBody)
 
x = theImages[theImagesCount].src.length;
while((theImages[theImagesCount].src.substring(x,x-1)) != "."){ x--; } clipend = x;
while((theImages[theImagesCount].src.substring(x,x-1)) != "/"){ x--; } clipstart = x;
pathnameFileName = theImages[theImagesCount].src.substr(clipstart,theImages[theImagesCount].src.length)
pathi = "C:\\Users\\WRFan\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\" + pathnameFileName
 
 
ADOStream.SaveToFile (pathi, 2) //Safety settings on this computer prohibit accessing a data source on another domain.
ADOStream.Close
 
oClone = document.createElement("IMG")
oClone.src = pathi
theImages[theImagesCount].swapNode(oClone)
}
}
}
}
document.onreadystatechange=fnStartInit;
function fnStartInit()
{
if (document.readyState=="complete")
{
window.setTimeout("IE_IMG_Bug()", 100);
}
}
 

 

Код:
 
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX Compatibility\{00000566-0000-0010-8000-00AA006D2EA4}]
"Compatibility Flags"=dword:00000000
 

 

Код:
 
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\CLSID\{00000566-0000-0010-8000-00AA006D2EA4}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]
 

 

Код:
 
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\ProtocolDefaults]
@=""
"@ivt"=dword:00000001
"file"=dword:00000003
"ftp"=dword:00000003
"http"=dword:00000002
"https"=dword:00000002
"shell"=dword:00000000
"ldap"=dword:00000004
"news"=dword:00000004
"nntp"=dword:00000004
"oecmd"=dword:00000004
"snews"=dword:00000004
 

Всего записей: 5275 | Зарегистр. 25-11-2002 | Отправлено: 22:48 19-03-2007
leseal



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А вообще есть у кого-ниить скрипт как на http://map.search.ch/ чтоб карту показывал без перезагрузки страницы? Очень надо  
 
 
Спасибо

Всего записей: 15 | Зарегистр. 06-09-2006 | Отправлено: 16:23 28-03-2007
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Google Maps.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 16:36 28-03-2007
leseal



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
нет я имею в виду получить такой скрипт себе чтоб я на сервере его разметсил и смог любую карту сделать на нем

Всего записей: 15 | Зарегистр. 06-09-2006 | Отправлено: 16:40 28-03-2007
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У Google Maps есть JS API, так что теоретически скрипты будут размещены на твоем сервере. Но карты и клиентские скрипты будут с гугла.
 
Бесплатных аналогичных скриптов я не знаю. Да и платных что-то не припомню.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 16:50 28-03-2007
MrNight



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не работает в OPera? в чем же дело?

Код:
 getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;

Всего записей: 364 | Зарегистр. 09-07-2005 | Отправлено: 22:12 01-04-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MrNight

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

открываем консоль ошибок и читаем сообщение об ошибке

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:13 01-04-2007
MrNight



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь встречал гостевую книгу на Ajax?

Всего записей: 364 | Зарегистр. 09-07-2005 | Отправлено: 17:50 03-04-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Компьютерный форум Ru.Board » Интернет » Web-программирование » AJAX


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru