Показать сообщение отдельно
  #1 (permalink)  
Старый 15.07.2015, 06:50
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

Область видимости переменной
Почему не записывает данные в переменную data в success?
Внутри этой функции все ок, но
SomeClass.prototype.foo = function(id){
	var data = false;
	ajax({
		method: 'POST',
		url: 'test.php',
		params: 'id='+id,
		success: function(response){
			data = response; // ответ получен
		}
	});
	return data;
}

пробовал и так:
var data = function(response){
		return response;
	}
	ajax({
		method: 'POST',
		url: 'test.php',
		params: 'id='+id,
		success: data
	});
	return data();


Но это работает

function foo(obj){
			obj.test('Hello, World');
		}
		function bar(){
			var data;
			foo({
				test: function(response){
					data = response;
				}
			})
			return data;
		}
		console.log(bar()); //hello world


Извиняюсь, спойлера не нашел, поэтому скидываю (на всякий случай) обертку для Ajax.
function ajax(setting){
	setting.method = setting.method === undefined ? 'GET' : setting.method;
	setting.params = setting.params === undefined ? null : setting.params;

	if (setting.url === undefined || typeof setting.success !== 'function' || (setting.method === 'POST' && setting.params === null)) return false;

	var xmlhttp,
		send = setting.method === 'GET' ? null : setting.params,
		url = setting.method === 'GET' ? setting.url + setting.params : setting.url;
	try{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e){
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest !== 'undefined'){
		xmlhttp = new XMLHttpRequest();
	}
	xmlhttp.open(setting.method, url, true);
	if (setting.method === 'POST'){
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	}
	xmlhttp.onreadystatechange = function(){
		if (xmlhttp.readyState == 4){
			if (xmlhttp.status == 200){
				setting.success(xmlhttp.responseText);
			}
		}
	}
	xmlhttp.send(send);
}

Вопрос возможно банальный, но...

Последний раз редактировалось Lemme, 15.07.2015 в 07:14.
Ответить с цитированием