Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2009, 11:16   #1
NeveX
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 12
Радость Вопрос по XMLHttpRequest

Изучаю сие творение человечества. Не могу понять как и для чего работает код:

PHP код:
/**
* Использует объект XMLHttpRequest для получения содержимого по заданному
* URLадресу методом GET. Получив ответ, передает его
* (в виде простого текста) указанной функции обратного вызова.
*
* Эта функция не блокируется и не имеет возвращаемого значения.
*/
HTTP.getText = function(urlcallback) {
var 
request HTTP.newRequest();
request.onreadystatechange = function() {
if (
request.readyState == && request.status == 200)
callback(request.responseText);
}
request.open("GET"url);
request.send(null);
}; 
,где newRequest() возвращает новый XMLHttpRequest объект.

Как я понял, создается объект запроса, запрос отсылается.
Вопросы по тексту:
1) url - это по видимому какой-то адрес. Если мы обращаемся к адресу то расчитываем получить какой-либо результат. В данном случае это текст. Вопрос в том ЧТО ИМЕННО мы получаем обращаясь к серверу? Посылается запрос, а дальше? Каким образом сервер или страница реагирует и отсылает источнику ответ? И что это за текст который должен возвратить нам сервер?

2) Не до конца понял назначение callback. По видимому он вызывается после того как мы уже отправили запрос и затем вызвали request.onreadystatechange() (поправьте меня если я ошибаюсь). Но тогда мы имеем ограничение ровно в 1 функцию для работы с полученным результатом! Или нам постоянно прийдётся вызывать getText() только ради того чтобы поменять функцию? Но ведь можно обращаться к объекту и за пределами неё. Тогда зачем нам вообще нужен callback?

3) В книге, которую я читаю, немало внимания уделяется заголовкам. Для чего они надо? И где они сохраняются?

Заранее спасибо за разъяснения.
NeveX вне форума Ответить с цитированием
Старый 24.09.2009, 14:29   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

PHP код:
HTTP.getText = function(urlcallback) { //определение функции getText обьекта НТТР
    
var request HTTP.newRequest(); // создали запрос
    
request.onreadystatechange = function() { //когда статус запроса изменился - тогда это означает, что сервер нам ответил.[URL="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-readystate"] Статусы[/URL] 
        
if (request.readyState == && request.status == 200callback(request.responseText); //если все данные получены (4) и статус-ответ сервера = OK (200), тогда вызовем функцию, которую мы указали в переменной callback  и передадим ей возвращенный ТЕКСТ от сервера.
    
}
    
request.open("GET"url); //открыть сокет
    
request.send(null); // послать
}; 
Цитата:
Вопрос в том ЧТО ИМЕННО мы получаем обращаясь к серверу?
текст. Это можеть быть text/html text/xml и некоторые другие текстовые из MIME.
Цитата:
Посылается запрос, а дальше? Каким образом сервер или страница реагирует и отсылает источнику ответ? И что это за текст который должен возвратить нам сервер?
А дальше открывается соединение с сервером, указанным в url и обращается к странице (скрипту), указанным в url (например, http://site.ru/script.php). После этого на сервере выполняется тот скрипт и все, что он выводит - передастся клиенту назад в качестве ответа. Если же скрипт ничего не намерен выводить, тогда и переменная responseText будет пустая.
Цитата:
2) Не до конца понял назначение callback. По видимому он вызывается после того как мы уже отправили запрос и затем вызвали request.onreadystatechange() (поправьте меня если я ошибаюсь). Но тогда мы имеем ограничение ровно в 1 функцию для работы с полученным результатом! Или нам постоянно прийдётся вызывать getText() только ради того чтобы поменять функцию? Но ведь можно обращаться к объекту и за пределами неё. Тогда зачем нам вообще нужен callback?
Смотрите. Ваш запрос вы делаете, так, например:
Код:
HTTP.getText("http://site.ru/script.php",myfunction);
После чего скрипт, отработав, отдает данные вашей функции myfunction, которая находится где-то в вашем коде. Функция должна иметь один параметр:
Код HTML:
function (mydata) {
   alert("Вот, что отдал сервер: " + mydata);
}
callback - это даже судя по названию - вызов вашей функции после выполнения другой функции, к которой обращались раньше.
Цитата:
3) В книге, которую я читаю, немало внимания уделяется заголовкам. Для чего они надо? И где они сохраняются?
Это уже другая тема. Создайте новую с таким вопросом. Ибо оффтопить не полагается.
SkyM@n вне форума Ответить с цитированием
Старый 24.09.2009, 14:47   #3
NeveX
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 12
По умолчанию

АГА! Вот это уже интересно=) Спасибо что объяснили.

Теперь хотелось бы уточнить ещё несколько моментов. Допустим в script.php лежит несколько функций. И также задано их выполнение. +они не обязательно выводят текст. Что я в этом случае получу?

+Если я допустим выполню requestXML() то мне просто возвратится содержимое xml-файла, так?
NeveX вне форума Ответить с цитированием
Старый 24.09.2009, 22:25   #4
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от NeveX Посмотреть сообщение
Допустим в script.php лежит несколько функций. И также задано их выполнение. +они не обязательно выводят текст. Что я в этом случае получу?
Например?
В любом случае, абсолютно вся информация, которая будет выводится в браузер (например операторами echo, print, print_r, var_dump, include.....) - все будет отправлено назад. Т.е. в роли браузера буде служить сокет, созданный джаваскриптом (XMLHttpRequest).

Цитата:
Сообщение от NeveX Посмотреть сообщение
+Если я допустим выполню requestXML() то мне просто возвратится содержимое xml-файла, так?
Нет совсем. Этот файл нужно еще создать на сервере. А уже потом содержимое этого файла, сгенерированное скриптом на сервере - обработается джаваскриптом, если задано так.
На счет requestXML - то я не в курсе, что она у вас выполняет. В таком случае вы лучше бы листинг всего класса XmlHttpRequest привели, если он небольшой. Только отформатировать не забудьте.
SkyM@n вне форума Ответить с цитированием
Старый 24.09.2009, 23:58   #5
NeveX
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 12
По умолчанию

Функция маленькая:

PHP код:
HTTP.getXML = function(urlcallback) {
var 
request HTTP.newRequest();
request.onreadystatechange = function() {
if (
request.readyState == && request.status == 200)
callback(request.responseXML);
}
request.open("GET"url);
request.send(null);
}; 
Всё конечно хорошо, но для чего может понадобиться такое сборище текстовой информации? XML понятно, можно обработать скриптовую инфу и выполнить её. А Текст то зачем?
NeveX вне форума Ответить с цитированием
Старый 24.09.2009, 23:59   #6
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от NeveX Посмотреть сообщение
Всё конечно хорошо, но для чего может понадобиться такое сборище текстовой информации? XML понятно, можно обработать скриптовую инфу и выполнить её. А Текст то зачем?
Как это зачем? Динамическая подгрузка. GMail работает таким образом.
SkyM@n вне форума Ответить с цитированием
Старый 25.09.2009, 00:04   #7
NeveX
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 12
По умолчанию

Хм, ну с этой темой я разобрался, спасибо за разъяснения. У меня остался только 1 вопрос - сть ли технологии вывода текста по конкретным функциям а не общим потоком? И можно ли передавать серверу параметры в виде переменных чтоб было совсем уже замечательно?
NeveX вне форума Ответить с цитированием
Старый 25.09.2009, 09:34   #8
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Да, есть. В вашем же примере это можно реализовать:
HTTP.getText("http://site.ru/script.php?var1=var1&val2=var2&var10=val10",myfunction);

ВОт и все. А уже в скрипте script.php обрабатывайте эти данные ($_GET["var1"],$_GET["var2"],$_GET["var10"]) и выводите, что хотите.
SkyM@n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос!!! tigor Общие вопросы Delphi 11 23.10.2009 09:45
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос по C++ Sanek_ntsk Свободное общение 3 09.01.2008 14:45
Вопрос! Rahim1993 Общие вопросы Delphi 3 07.01.2008 01:16