Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
67 / 67 / 24
Регистрация: 21.11.2008
Сообщений: 226
1

Ajax. Видимость XMLHttpRequest.

03.08.2010, 18:17. Показов 1658. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот имеется функция обработчик onclick кнопки на странице:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getData()
{
    var XMLHttpRequestObject = new XMLHttpRequest();
    
    XMLHttpRequestObject.open('GET','URL...');
 
    XMLHttpRequestObject.onreadystatechange = function()
    {
        if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200){
            
            var result = XMLHttpRequestObject.responseText;
            .
            .
            .
        }
        
    }
    XMLHttpRequestObject.send(null);
}
Вопрос такой: Объект XMLHttpRequestObject является локальным (var), т.е после завершения функции getData() он должен уничтожиться. Так как же он реализован, что продолжает существовать и вызывать анонимную функцию обработчик после завершения функции getData()? Сама функция обработчик анонимная, поэтому даже после завершения работы getData() имеет доступ к объекту XMLHttpRequestObject (к примеру XMLHttpRequestObject.responseText). Но как происходит вызов анонимной функции?? По идее вызов должен быть c использование объекта -
Javascript
1
XMLHttpRequestObject.onreadystatechange()
которого уже не должно существовать ???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2010, 18:17
Ответы с готовыми решениями:

Ajax (XMLHttpRequest) + SSL
как можно с помощю аякс отправлять зашифрованные SSL(Https) запросы на сервер и принимать от...

Отправку данных с помощью XMLHttpRequest переделать в ajax.
<script type='text/javascript'> function start(){ var x=document.getElementById('login').value;...

Как с помощью XMLHttpRequest (ajax) отправить спецсимволы?
как с помощю XMLHttpRequest (ajax) отправить специальные символы такие как < > & " '

Возврат responseText из XMLHttpRequest aka AJAX как результат работы функции
Вот как бы обычный Ajax запрос, на чистом JS. function ajax() { var xhr = new...

4
Благотворец
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
03.08.2010, 18:25 2
Просто JS создает точку входа (обратную функцию) при этом сохраняя все значения которые ей доступны.
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.08.2010, 18:27 3
Переменные ссылаются на объекты. Когда на объект больше никто не ссылается (все ссылки потеряны), объект уничтожается.

После выхода из функции getDate в памяти остается анонимная функция, которая с помощью переменной XMLHttpRequestObject ссылается на объект. В свою очередь этот объект ссылается на эту анонимную функцию свойством onreadystatechange. Также на объект ссылается браузер.

Когда запрос выполнен и отработан, браузер перестает ссылаться на объект. Остается объект и анонимная функция, ссылающиеся друг на друга (циклические ссылки). Извне на них никто не ссылается, поэтому они подлежат уничтожению.
1
67 / 67 / 24
Регистрация: 21.11.2008
Сообщений: 226
03.08.2010, 23:06  [ТС] 4
Спасибо все достаточно подробно объяснили!
Возник только один вопрос - что хранится в window.XMLHttpRequest (или window.ActiveXObject для IE) и как браузер ссылается на объект XMLHttpRequestObject ?
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.08.2010, 07:59 5
Цитата Сообщение от Викдон Посмотреть сообщение
что хранится в window.XMLHttpRequest (или window.ActiveXObject для IE)
Там хранится функция.
Javascript
1
2
3
4
5
6
var o = new XMLHttpRequest();
// на самом деле эквивалентно
var o = new window.XMLHttpRequest();
// или
var f = window.XMLHttpRequest;
var o = new f();
Добавлено через 1 минуту
Цитата Сообщение от Викдон Посмотреть сообщение
как браузер ссылается на объект XMLHttpRequestObject ?
Это уже не наша забота, нам главное сам факт. Пока этот запрос выполняется, браузер на него как-то ссылается. Когда запрос завершен, браузер перестает на него ссылаться.
0
04.08.2010, 07:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2010, 07:59
Помогаю со студенческими работами здесь

XMLHttpRequest vs jquery.ajax
есть ли разница в скорости работы ? и как написать тоже самое используюя библиотеку jquery ? ...

Заполнение и видимость значений массива в обработчике ajax и за его пределами
Доброго времени суток. Нужна помощь с этим скриптом: var markers = new Array(); $.ajax({...

Как использовать AJAX через XMLHttpRequest?
Ребята короче есть задание, Первую часть я сделал - сделал страницы, БД тоже использовал .но...

Проверка на xmlhttprequest для ajax, динамическое обновление контента без перезагрузки страницы
Доброго времени суток уважаемые форумчане, Облазил и перерыл весь интернет но конкретного ответа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru