Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

AJAX как правильно задавать onreadystatechange

13K
05 марта 2007 года
Anton Kharlamov
48 / / 06.02.2007
здарвствуйте, возникла такая проблема вот код
[HTML]<script type="text/javascript" language="javascript">
function makeRequest(url) {
var http_request = false;

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// Читайте ниже об этой строке
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Не вышло :( Невозможно создать экземпляр класса XMLHTTP ');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, true);
http_request.send(null);

}

function alertContents(http_request) {

alert(http_request.readyState);
if (http_request.readyState ==4) {
alert(http_request.responseText)
}


}
</script>
<a href="#"
onclick="makeRequest('test.txt')">
Сделать запрос
</a>[/HTML]

в итоге выдается ошибка, дело все в http_request.onreadystatechange = alertContents;
по идее я присваиваю запросу ссулку на функцию которая будет его обрабатывать. Этот вариант не работает.

Но почему то работает если написать так http_request.onreadystatechange = function() { alertContents(http_request); };

обьясните плизз почему в чем ошибка в первом варианте и что собственно значит правая часть второго варианта:) спасибо
239
05 марта 2007 года
Dolonet
1.7K / / 20.05.2000
Попробуйте так: http_request.onreadystatechange = alertContents(http_request);
Или так: http_request.onreadystatechange = alertContents();
Функция должна быть со скобками обязательно.
13K
05 марта 2007 года
Anton Kharlamov
48 / / 06.02.2007
не, не работает, а что киньте плиз ссылку на про анонимыне функции в яве)))
13K
05 марта 2007 года
Anton Kharlamov
48 / / 06.02.2007
вот маленькакая цитата из описания по аджаксу


Далее вам необходимо решить, что вы будете делать после получения ответа сервера. На этом этапе вам необходимо указать объекту, какая JavaScript функция будет обрабатывать ответ. Это делается путем присваивания свойству onreadystatechange имени JavaScript функции, которую вы собираетесь использовать:

http_request.onreadystatechange = nameOfTheFunction;

Заметьте, что после названия функции нет скобок и не указано параметров, потому что вы просто присваиваете ссылку на функцию, а не вызываете ее. К тому же, вместо указания имени функции, вы можете использовать возможность JavaScript объявлять функции на лету (так называемые &#171;анонимные функции&#187;) и указывать действия, которые тотчас же будут обрабатывать ответ:


http_request.onreadystatechange = function(){
// какой-нибудь код
};



как видно из нее должен работать и еще вариант http_request.onreadystatechange = alertContents;

хмм, странно, странно
92
05 марта 2007 года
Тень Пса
2.2K / / 19.10.2006
эт с мод реврайтом.... хотя... как передашь params так и захавает )))
на всякий случай: www.host.ru и host.ru для него оказывается разные вещи :D
Код:
function ajax_request(params,target) {
    if (window.location.href.indexOf("www") != -1) {
        ajaxGet("http://www.somehost.ru/"+params,target);
    } else {
        ajaxGet("http://somehost.ru/"+params,target);
    }
}///////////////////////////////////////////////////////////////////////
function ajaxGet(url,target)
{
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.open("GET", url, true);
        req.overrideMimeType('text/plain; charset=windows-1251');
        req.onreadystatechange = function() {ajaxDone(target);};
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.open('GET', url, true);
            req.onreadystatechange = function() {ajaxDone(target);};
            req.send();
        }
    }
}    
///////////////////////////////////////////////////////////////////////
function ajaxDone(target) {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var Result = req.responseText;
            if (Result != '') {
                document.getElementById(target).innerHTML = "";
                document.getElementById(target).innerHTML = Result;
            }
        } else {
            document.getElementById(target).innerHTML = "AJAX Error:\n" +
                req.statusText;
        }
    }
}
держи =) сразу под Win-1251 =)
12
07 марта 2007 года
alekciy
3.0K / / 13.12.2005
Anton Kharlamov если нужно передать в callback функцию параметры, то можно использовать переменные из глобальной зоны видимости (http://alekciy.ru/test/anchor.php?url=http%3A%2F%2Fwww.ixbt.com%2Fsoft%2Fajax.shtml&text=%D0%9A%D0%B0%D0%BA%20%D1%8F#anchor)
12
07 марта 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Anton Kharlamov
не, не работает, а что киньте плиз ссылку на про анонимыне функции в яве)))


:mad:
http://phpclub.ru/talk/showthread.php?s=&threadid=50884&rand=2

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог