Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.09.2010, 22:21
Интересующийся
Отправить личное сообщение для Sahaviev Посмотреть профиль Найти все сообщения от Sahaviev
 
Регистрация: 16.07.2010
Сообщений: 13

XMLHTTPRequest Глобальная область видимости переменных
Всем привет! Извините за глупый вопрос, но никак не могу разобраться с областью видимости переменных.

var test;

function ChangeRadio()
{		
var id_rubric = document.getElementById("id_rubric").value;
var url = "ajax.functions.php?change_radio=" + encodeURIComponent(type);
  
    request.open("GET", url, true);
    request.onreadystatechange = updateRadio;
    request.send(null);
}


function updateRadio()
{
	if (request.readyState == 4)
	{
	       	if (request.status == 200)
	       	{
                // вот это сработало бы
                document.getElementById("radio").innerHTML = request.responseText.split("|");
                // а вот это нет
                // test = request.responseText.split("|"); 
		}
		else
		alert("status is " + request.status);
	}
}


Надеюсь понятно изложил суть проблемы, может немного неправильно. Не могу после обработки AJAX'ом вернуть результат в глобальную переменную JS. Только если ее(переменную) создавать внутри функции UpdateRadio. Экспериментировал своими ручками и гуглоиском наверное часа 4 точно. Ничего не помогло. Больше времени искать нету.

Пожалуйста, дайте совету как сделать с помощью XMLHTTPrequest.

Если вопрос очень глупый, то честно не хотел засорять ваш форум. Но так как сам в основном программист PHP возникают такие вот вопросы. Всем спасибо большое.

P.S.: да, вопрос можно трактовать и так: Как вернуть результат выполнения AJAX в ChangeRadio() хотябы тогда.
Ответить с цитированием
  #2 (permalink)  
Старый 10.09.2010, 22:57
Интересующийся
Отправить личное сообщение для Sahaviev Посмотреть профиль Найти все сообщения от Sahaviev
 
Регистрация: 16.07.2010
Сообщений: 13

Может хоть кто-нибудь ответит?
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2010, 23:26
Новичок
Отправить личное сообщение для inGray Посмотреть профиль Найти все сообщения от inGray
 
Регистрация: 03.08.2010
Сообщений: 230

поскольку любая глобальная переменная лишь свойство объекта window то можно window.test... Но проблема мне кажется не в области видимости.
__________________
Не хочешь, чтобы тебя послали? Не спрашивай куда идти.
Ответить с цитированием
  #4 (permalink)  
Старый 11.09.2010, 00:18
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Sahaviev
Может хоть кто-нибудь ответит?
вам тут никто и ничего не должен.
и если вам не ответили в течении получаса, то либо никого из отвечающих нету в сети, либо ваш вопрос никому не интересен по причине его глупости, и потому что ответ на него расписан многие тысячи раз.
во-втором случае как правило все равно есть чей-то ответ как минимум формата RTFM

В общем, незачем поднимать тему в течении получаса, если на нее никто не обратил внимания
это недопустимо даже в разделе Работа.


Итак, долгожданный RTFM:
http://javascript.ru/ajax/intro#sinh...a-model-v-ajax
Иными словами:
вы иcпользуете ассинхронный JS
и глобальная переменная test(которая на самом деле спокойно задается из функции), будет видна ТОЛЬКО когда ф-ция updateRadio выполнится.
а между тем как завершится ф-ция ChangeRadio, и начнет выполнятся updateRadio может пройти произвольный промежуток времени, в речении которого глобальный test, разумеется не будет иметь нового значения
хотите его использовать, делайте внутри updateRadio
Ответить с цитированием
  #5 (permalink)  
Старый 11.09.2010, 00:57
Интересующийся
Отправить личное сообщение для Sahaviev Посмотреть профиль Найти все сообщения от Sahaviev
 
Регистрация: 16.07.2010
Сообщений: 13

Извините если не правильно поняли меня, да я сам чего-то нагло слишком написал=)

Всем спасибо, буду использовать синхронный запрос, скорее всего.
Ответить с цитированием
  #6 (permalink)  
Старый 11.09.2010, 01:32
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

в 99% случаев синхронные запросы используются новичками от неумения сделать лучше
учитывая, что JS - однопоточный язык, гораздо удобнее(для конечного пользователя) использовать ассинхронные запросы.
именно в этом одну из самых вкусных фишек набора технологий AJAX
накладные расходы на формирование такого кода не так уж и велики

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Область видимости внутри функции YISHIMITSY Общие вопросы Javascript 1 25.08.2010 06:50
Область видимости методов mexoboy Общие вопросы Javascript 10 10.08.2010 13:09
Область видимости переменной. noumo Events/DOM/Window 3 03.12.2009 23:48
можно ли включить функцию в глобальную область видимости из файла maxval Элементы интерфейса 13 04.10.2009 07:11
Область видимости переменных на примере ajax human Общие вопросы Javascript 4 19.02.2009 23:12