|
|
|
| Здравствуйте.
в див с id='a_all' пытаемся вывести рез-т запроса через ажакс
var e_t = document.getElementById('a_all');
e_t.innerHTML = '';
str1 = ajax_1('?dd=4',1);
e_t.innerHTML = str1;
|
сам запрос:
function ajax_1(param,if_get)
{
// получаем объект запроса
var xmlhttp = getXmlHttp();
get_return = 'пустое место';
// создаем путь
var get_url = '1.php';
var get_ = get_url + param;
// запрос
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
if (if_get == 1)
{
get_return = xmlhttp.responseText;
alert(get_return + ' vvv ' + xmlhttp.responseText+"rrrr");
}
}
}
}
xmlhttp.open('GET', get_,true);
xmlhttp.send(null);
return get_return;
}
|
в файле 1.php:
получаем алерт:
"запрос прошел // вроде бы переменной get_return значение присвоено?
vvv запрос прошел
rrrr"
|
через переменную get_return в e_t.innerHTML добавляется "пустое место".
подскажите, пожалуйста, почему? | |
|
|
|
|
|
|
|
для: btr
(10.02.2013 в 12:47)
| | -----------------------
пс догадываюсь, что алерт и присвоение срабатывает позже, чем приходит ответ.
Нашел, что вытащить это значение можно через функцию обратного вызова, переданную в качестве параметра в ajax_1. Но вот как организовать доступ к этому значению вне функции ajax_1?
разЪясните пожалуйста | |
|
|
|
|
|
|
|
для: btr
(10.02.2013 в 13:20)
| | ну хотя бы толкните, где почитать про это?
пажаалуйста!! | |
|
|
|
|
|
|
|
для: btr
(10.02.2013 в 13:43)
| | в общем, решил поступить так:
передал в функцию объект, в который надо вставить рез-т запроса
var e_t = document.getElementById('a_all');
e_t.innerHTML = '';
ajax_1('?dd=4',1,e_t)
|
и произвожу вставку в обработчике
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
if (if_get == 1)
{
e_t.innerHTML = xmlhttp.responseText;
}
}
}
}
|
правильно ли так поступать? | |
|
|
|
|
|
|
|
для: btr
(10.02.2013 в 14:25)
| | во-первых:
надо так:
1. open
2. onreadystatechange
3. send
а у вас:
1. onreadystatechange
2. open
3. send
|
во-вторых, функция, создающая объект xmlhttp, открывающая его и отсылающая запрос, не может ничего знать о том, каков будет ответ сервера
ответ сервера узнаёт безымянная функция, коя прописана у вас на событии onreadystatechange объекта xmlhttp и ответ эта функция может получить только после четвёртого её срабатывания (когда readyState изменится в четвёртый раз с нуля до 4-х)
следовательно, сначала делаете просто вызов функции ajax_1 (), которая ничего не должна возвращать (внутри функции скрипач return get_return; не нужен)
var e_t = document.getElementById('a_all');
e_t.innerHTML = '';
str1 = ajax_1('?dd=4',1);
e_t.innerHTML = str1;
|
прописывание ответа сервера должно быть внутри безымянной функции, коя "навешена" у вас на onreadystatechange | |
|
|
|
|
|
|
|
для: ЯСА
(11.02.2013 в 09:30)
| | во-первых спасибо.
во-вторых
прописывание ответа сервера должно быть внутри безымянной функции,
а поподробнее можно? как именно прописать ответ??
я вот просто в эту безымянную функцию элемент передал, но мне кажется, это не совсем правильно... | |
|
|
|
|
|
|
|
для: btr
(11.02.2013 в 09:52)
| | в народе говорят, что "когда кажется - креститься надо"
но лучше всего - узнать
------
теоретически всё очень просто:
1) функция А () создаёт объект XMLHTTPRequest, открывает его и отправляет запрос
2) на этом её работа исчерпывается, здесь происходит т.н. "разрыв исполнения", сравнимый с использованием модального окна alert () внутри js-кода: покуда на "ОК" не нажмёте, исполнение приостанавливается
на какое время приостанавливается - оно неизвестно, зависит от пользователя
3) так и здесь... когда придёт ответ сервера (и придёт ли он?) - функции А () неизвестно
время получения запроса сервером и прихода ответа от него зависит от многих факторов (скорость, обеспечиваемая провайдером; доступность сервера и т.д.)
4) но внутри функции А () вы можете назначить вызов другой функции - функции В (), которая будет срабатывать при изменении состояния объекта XMLHTTPRequest
5) "место для вывода" ответа сервера вы можете:
-- либо прописать непосредственно в функции В () - если это "место" можно определить в глобальных переменных (например, по id объекта),
-- либо передать это "место" через параметры функции В () из функции А ()
и первый, и второй способы будут "правильными" - решение "как лучше" принимать вам
--------------
AJAX (ажакс) - это от английского Asynchronous Javascript and XML
так что ваш "асинхронный ажакс" - это что-то дважды асинхронное :) | |
|
|
|
|
|
|
|
для: ЯСА
(11.02.2013 в 10:29)
| | спасибо, буду крепко думать
---------------
ну это я в смысле, что посылка запроса может быть синхронной (и тогда действительно как с алертом - пока ответ не пришел, сидим, ждем) или асинхронной и вот тогда становится интересно :) | |
|
|
|
|
|
|
|
для: btr
(11.02.2013 в 20:03)
| | объект для связи страницы с сервером называется XMLHTTPRequest
а работать он может как синхронно, так и Асинхронно
и только в последнем случае это называется AJAX
почитайте про это дело по-русски | |
|
|
|