AJAX вопрос от чайника
Вложений: 1
Привет! Изучаю чистый ajax, вот поставил перед собой задание, пишу проверку доменов, суть в чем в полу вводим домен(напрмер rambler.ru), а ниже этого поля в див ввыводиться результат(результат обрабатываеться файлом whois.php), пока идет запрос внизу должна показываться прелоадер, для реализации взял книгу и попытался написать но у меня не получилось про помочь , исходники вложил, если можно будет кратко что не так было....
|
Цитата:
С JavaScript-частью все плохо:
if(!xnlHttp)
alert("ERROR");
else
return xmlHttp;
Вы же этим самым выходите из функции createXmlHttrRequestObject, и в любом случае никакиеfunctio process()написанные с ошибкой, ни function handleServerRespone()не будут доступны в глобальной области видимости, так как вы их внутри createXmlHttrRequestObject написали. |
вот я подправил:
// JavaScript Document
var xmlHttp=createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
var xmlHttp;
if(window.ActiveXObject)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
xmlHttp=false;
}
}
else
{
try
{
xmlHttp=new XMLHttpRequest();
}
catch(e)
{
xmlHttp=false;
}
}
if(!xmlHttp)
alert("ERROR");
else
return xmlHttp;
}
function process()
{
if(xmlHttp.readyState==4 || xmlHttp.readyState==0)
{
url=encodeURIComponent(document.getElementById("url").value)
xmlHttp.open("GET","whois.php?url=" + url, true);
xmlHttp.onreadystatechange=handleServerRespone;
xmlHttp.send(null);
}
else
setTimeout('process()',1000);
}
function handleServerRespone()
{
url2=document.getElementById("url2");
while(xmlHttp.readyState!=4)
{
url2.innerHTML+="<img src="ajax-loader.gif" width="20" height="17">";
}
if(xmlHttp.readyState==4)
{
try
{
respone=xmlHttp.responeText;
url2.innerHTML+=respone;
}
catch(e)
{
alert("ERROR");
}
}
}
Но всеравно не рабоатет |
Почитайте xmlhttprequest.ru, у вас какая-то каша с контролем readyState.
|
почитал, но не какой каши не увидел, мож я что то нето в других файлах сделал?
|
Цитата:
Разбираться в куче ваших readyState нет желания, если я правильно понял, что весь ваш код делает, то можно переписать как-то так:
function process() {
var url2 = document.getElementById("url2");
url2.innerHTML += '<img src="ajax-loader.gif" width="20" height="17">';
var url = encodeURIComponent(document.getElementById("url").value);
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open("GET", "whois.php?url=" + url, true);
xhr.send(null);
(function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
url2.innerHTML = xhr.responeText;
} else {
alert(xhr.statusText);
}
} else {
setTimeout(arguments.callee, 20);
}
}());
}
на работоспособность не проверял, писал прямо на форум |
да так работает токо одно но, страницу приходиться вручную перезагружать!
|
зачем ее перезагружать?
|
ну вот я ввел домен например rambler.ru ниче не показало, а если я затем нажл обновить страницу то после обновления вывело информацию........
|
После обновления должна исходная страница отображаться, не знаю что у вас там происходит, покажите страницу.
|
Вложений: 1
Цитата:
|
Цитата:
|
так должно уже работать на лету, я в файле index.html происал <body onload="process();"> поидеи должно работать а не работает, если чесно как сделать по другому проверку на лету незнаю, прошу так сказать подсказать.....
|
Событие body onload наступает при загрузке странице, откуда скрипт по вашему должен взять данные для запроса, если в поле для домена еще ничего не введено?
Чтобы сделать автоматическую проверку, нужно подумать о том, чтобы новый запрос дожидался окончания предыдущего или принудительно завершал его (abort). Так же, хорошо бы отправлять запрос только тогда, когда пользователь ввел именно доменное имя, а не просто набор символов, проверить это можно с помощью регулярного выражения. |
то есть нужно создать цикл???
|
| Часовой пояс GMT +3, время: 11:16. |