Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2012, 02:08
Аспирант
Отправить личное сообщение для ozzon91 Посмотреть профиль Найти все сообщения от ozzon91
 
Регистрация: 09.05.2012
Сообщений: 47

Возвращение результата из ajax запроса
Почему вылетает undefined когда return result хотя alert(result); выдает верный результат, как корректно вернуть результат?
function vote(url) {
	var req = createXmlHttpRequestObject();
	var result;
	
	req.onreadystatechange = function() {  
	if (req.readyState == 4 && req.status == 200) {
		result = req.responseText;
		return result;
		}
	}
	req.open("GET", url, true);
	req.send(null);
}
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2012, 02:34
Интересующийся
Отправить личное сообщение для pharrell Посмотреть профиль Найти все сообщения от pharrell
 
Регистрация: 27.04.2011
Сообщений: 20

Нельзя вернуть результат с помощью return из AJAX запроса. JavaScript - асинхронный язык. Использовать полученную информацию можно только с помощью callback.
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2012, 02:46
Аспирант
Отправить личное сообщение для ozzon91 Посмотреть профиль Найти все сообщения от ozzon91
 
Регистрация: 09.05.2012
Сообщений: 47

Посоветуйте как решить проблему?
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2012, 02:53
Аватар для shkoder
Аспирант
Отправить личное сообщение для shkoder Посмотреть профиль Найти все сообщения от shkoder
 
Регистрация: 06.07.2012
Сообщений: 31

function vote(url, callback) {
	var req = createXmlHttpRequestObject();
	var result;
	req.onreadystatechange = function() {  
	if (req.readyState == 4 && req.status == 200) {
		result = req.responseText;
		if (typeof callback === 'function')
			callback.call(this, result);
		}
	}
	req.open("GET", url, true);
	req.send(null);
}
vote('url', function(response){
	alert(response);
});

Привыкайте к асинхронному программированию.
req.onreadystatechange - обработчик события (а оно происходит не сразу), т.е. представьте вот так.
function vote(url) {
	var req = createXmlHttpRequestObject();
	var result;
	//req.onreadystatechange определяем обработчик события, но для наглядности не будем брать это во внимание 
	req.open("GET", url, true);
	req.send(null);
}
console.log(vote(url)); // >>> undefined

по событию readystatechange, т.е. через некоторое время, когда с сервера придет ответ, выполнится
if (req.readyState == 4 && req.status == 200) {
	result = req.responseText;
	return result;
}
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2012, 02:54
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

ozzon91,
function vote(url) {
	var req = createXmlHttpRequestObject();
	var result;
	
	req.onreadystatechange = function() {  
	if (req.readyState == 4 && req.status == 200) {
		result = req.responseText;
		//Вот туть вставляем свою вызов функции обработки инфы; 
                        МуProcess(result) ;

		}
	}
	req.open("GET", url, true);
	req.send(null);
}
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2012, 03:20
Аспирант
Отправить личное сообщение для ozzon91 Посмотреть профиль Найти все сообщения от ozzon91
 
Регистрация: 09.05.2012
Сообщений: 47

вот так всеравно undefined
function vote(url, callback) {
	var req = createXmlHttpRequestObject();
	var result;
	
	req.onreadystatechange = function() {  
	if (req.readyState == 4 && req.status == 200) {
		result = req.responseText;
		if(typeof callback === 'function'){
			callback(result);
			}
		}
	}
	req.open("GET", url, true);
	req.send(null);
}

alert(vote(url, function(result){return result;}));
Ответить с цитированием
  #7 (permalink)  
Старый 01.08.2012, 03:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

ozzon91,
Что говорит подобный тест
function vote(url, callback) {
	var req = createXmlHttpRequestObject();
	var result;
	
	req.onreadystatechange = function() {  
	if (req.readyState == 4 && req.status == 200) {
		result = req.responseText;
		alert(result);
		//callback(result);
		}
	}
	req.open("GET", url, true);
	req.send(null);
}

alert(vote(url, function(result){return result;}));
Ответить с цитированием
  #8 (permalink)  
Старый 01.08.2012, 03:37
Аспирант
Отправить личное сообщение для ozzon91 Посмотреть профиль Найти все сообщения от ozzon91
 
Регистрация: 09.05.2012
Сообщений: 47

Deff
анонимная функция в параметре выполняется независемо от того что там написано в vote, ваш вариант сначала выдает андефаинд как результат выполненияя анонимной функции, затем вылетает алерт с result как раз с тем значением которое я никак не могу вернуть из vote.
Ответить с цитированием
  #9 (permalink)  
Старый 01.08.2012, 03:43
Аватар для shkoder
Аспирант
Отправить личное сообщение для shkoder Посмотреть профиль Найти все сообщения от shkoder
 
Регистрация: 06.07.2012
Сообщений: 31

ozzon91,
alert(vote(url, function(result){return result;}));

Не могу понять почему вы так делаете
Я ж расписал - vote ничего не возвращает, но в нее вы передаете callback, который выполнится только после того как придет ответ с сервера
Ответить с цитированием
  #10 (permalink)  
Старый 01.08.2012, 03:51
Аспирант
Отправить личное сообщение для ozzon91 Посмотреть профиль Найти все сообщения от ozzon91
 
Регистрация: 09.05.2012
Сообщений: 47

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка результата ajax yura-666-yura AJAX и COMET 3 15.06.2012 03:28
Обработка данных во время AJAX запроса user783 AJAX и COMET 5 09.12.2011 03:24
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
Проблема с событиями после ajax запроса Mirgorod AJAX и COMET 5 12.06.2010 18:24
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23