Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вынести переменную за объект javascript (https://javascript.ru/forum/misc/34495-kak-vynesti-peremennuyu-za-obekt-javascript.html)

lixa4 07.01.2013 16:21

Как вынести переменную за объект javascript
 
function gethtml(p){
		link = String(p).substr(strrpos(String(p), '/' ), strlen(String(p)));
		$.ajax({
			url: link,
			success: function(data){
				window.html = hand(data,'<bo' + 'dy class=center>','</bo' + 'dy>');
			};
		});
		return html;
	};

Вопрос таков: "Как вынести переменную html из объекта?"

skfyann 07.01.2013 16:31

Я, конечно извиняюсь, но из какого объекта?

Deff 07.01.2013 17:44

lixa4,
Никак(поскольку асинхронное получение) - просто запускайте из аякса функцию обработчик
function setHTML(html){
  //Тут Ваши дествия
}
function gethtml(p){
		link = String(p).substr(strrpos(String(p), '/' ), strlen(String(p)));
		$.ajax({
			url: link,
			success: function(data){
				window.html = hand(data,'<bo' + 'dy class=center>','</bo' + 'dy>');
			};
		});
		setHTML(html);
	};

lixa4 07.01.2013 18:33

Он не видит переменную и не инициализирует её не при каких обстоятельствах за функцией внутри объекта ajax..
моя цель - возвратить эту переменную из основной функции "getHTML".

DjDiablo 07.01.2013 18:38

Это просто напросто невозможно.
когда ты получишь переменную html, функция success ещё несработает, и значение установить твоей переменной неуспеет.

это асинхронное программирование, незабывай.

вариант решения
function gethtml(p,callback){
		link = String(p).substr(strrpos(String(p), '/' ), strlen(String(p)));
		$.ajax({
			url: link,
			success: function(data){
				callback ( hand(data,'<bo' + 'dy class=center>','</bo' + 'dy>') );
			};
		});
		setHTML(html);
};

//используем
gethtml("бла бла",function(data){
     alert (data);
})

ещё это можно было бы решить функциональным стилем, но это слишком для этого примера, да и сложнее порядка на два. Сначало с асинхронным разберись.

lixa4 07.01.2013 18:45

возможно, всё возможно. Установив таймаут на 100 миллисекунд можно получить переменную внутри таймаута, однако как вынести её оттуда я тоже незнаю.
function gethtml(p){
		setTimeout('var a = html; alert(a);', 100);
		// В этом случае у нас всё выводит, но вынести переменную за таймаут мне не удалось =(
		link = String(p).substr(strrpos(String(p), '/' ), strlen(String(p)));
		$.ajax({
			url: link,
			success: function(data){
				window.html = hand(data,'<bo' + 'dy class=center>','</bo' + 'dy>');
			}
		});
	};

Deff 07.01.2013 19:00

lixa4,
Блин ну вынесешь ты её - но те все одно нужно запустить ункцию и передать текущее полученные данные.
Смысл в споре? - Обрамить обработку результата в функцию и поставить вызов в Аяксе
Если оно сначала использется на странице - сделать вызов обработки результата до аякса в теле страницы


Часовой пояс GMT +3, время: 10:50.