18:22

Аякс.

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
Здравствуйте.

Есть код (взят из учебника):



В общем, с помощью функции createXMLHttp() создаётся объект и используется для запроса к серверу. Ответ сервера выводится с помощью alert'а.

Вопрос, возможно ли как-нибудь переписать эту функцию, чтобы она возвращала переменную с?
То есть, нужна возможность сделать что-то типа такого:



Чтобы в x у нас оказался ответ сервера. Такое возможно?

Комментарии
03.04.2012 в 18:31

The day that you stop running is the day that you arrive.
в коде выше у вас в "c" оказывается ответ сервера.
var c = oXmlHttp.responseText;
alert (c);
03.04.2012 в 18:36

fire-dragon
alert(c); замените на return c;
03.04.2012 в 18:38

The day that you stop running is the day that you arrive.
Лучше всего начать диалог с описания, чего вы хотите добиться таким образом.
03.04.2012 в 18:39

The day that you stop running is the day that you arrive.
fire-dragon, не прокатит с анонимной функцией
03.04.2012 в 18:50

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
neo_rage, в коде выше у вас в "c" оказывается ответ сервера.
var c = oXmlHttp.responseText;
alert (c);


Это да, это я понимаю. Мне нужно её вернуть в вызывающую функцию.


Лучше всего начать диалог с описания, чего вы хотите добиться таким образом.

Суть. Есть функция, которая проверяет кучу всего, типа такой:

function tuchka ()
{
if (условие 1)
{
действие;
return ("false");
}

if (условие 2)
{
действие;
return ("false");
}

...

if (условие N)
{
действие;
return ("false");
}
}

Мне нужно написать ряд проверок в корых блок if будет выглядеть примерно так:

if (getAjax(url) == "значение")
{
действие;
return ("false");
}

Для этого мне надо, чтобы getAjax(url) возвращала ответ сервера, чтобы я мог его проверить. Я вот не знаю, как это корректно сделать. Потому и задал сюда вопрос.
03.04.2012 в 18:51

fire-dragon
что мешает заблокировать асинхронность? или менять какую либо глбальную переменную
03.04.2012 в 19:00

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
fire-dragon, что мешает заблокировать асинхронность?

Не совсем понял, мне надо чтобы это было незаметно для пользователя.



или менять какую либо глбальную переменную


Если имеется в виду:

...
var c;
...
c = oXmlHttp.responseText;
...

То есть, объявить с в начале функции getAjax(url), то тут получается такая радость, что в с не попадает ответ сервера, а попадает undefined.
03.04.2012 в 19:20

Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
fire-dragon, или менять какую либо глбальную переменную

Другой вариант вроде бы фурычит, но не совсем правильно.
1) Объявляю вне всех функций переменную: var a = "null";
2) внутри getAjax(url) прописываю: а = oXmlHttp.responseText;
3) в функции с проверкой, пишу getAjax(url);
4) проверяю a.

Вроде всё нормально, но при первой проверке в а всё равно null. Со второй проверки и дальше - в а находится ответ сервера.
Можно конечно два раза вызвать getAjax(url), чтобы избежать null при первой проверке, но почему-то мне кажется, что это не совсем корректно.

upd: вариант с двойным вызовом getAjax(url) не фурычит - первая проверка так же выдаёт null.
03.04.2012 в 20:27

fire-dragon
Вы мыслите в синхронном режиме. Смысл такой: вызываете getAjax и занимаетесь своими делами дальше. Когда приходит ответ вы его используете например так $('.divVithMessage').text(c);

anton.shevchuk.name/javasсript/jquery-for-begin...
04.04.2012 в 00:17

Sanctus Satanas
Говоря проще, тут идея в том, что передать в getAjax коллбек-функцию, которая выполнится, когда ответ будет получен.
Т.е. это будет выгледять не
if (getAjax(url)) ляляля
а наподобие
getAjax(url, function(){ ляляля } );
04.04.2012 в 00:21

fire-dragon
www.hunlock.com/blogs/Snippets:_Synchronous_AJA...



04.04.2012 в 05:06

когда ваш код заработает, перепишите весь свой яваскрипт на приличном фреймворке типа mootools
04.04.2012 в 11:10

Sanctus Satanas
Ну да, ajax можно и синхронно выполнять, но надо как бы понимать, что это заблокирует выполнение всего JS до ответа от сервера (или таймаута). Да и не только JS, собственно, страница вообще подвиснет целиком.
04.04.2012 в 11:13

учитывая что в аббревиатуре аякс первая буква соответствует слову "асинхронный", становится довольно смешно
04.04.2012 в 11:20

Sanctus Satanas
ehlo_kitty, конечно, смешно. ) Просто термина SJAX нет. Ну не писать же "выполнять HTTP-запросы из Javasсript посредством интерфейса XMLHttpRequest". )
04.04.2012 в 11:32

да вообще ничего не надо писать, пусть чувак наконец привыкает самостоятельно читать документацию