0

Доброе время суток! Подскажите как вернуть значение из Ajax.Request в dataSource

new Ajax.Request(
            'index.php',
            {queue: {position: 'end', scope: 'command'},
             method: 'post',
             postBody: 'module=Reports&action=ReportsAjax&mode=ajax&file=ReportAutoHome&report=gr',
             onComplete: function(response) {
                iteam = [{ date: '01-06-2013 Sat', dayT: 65942, nightT: 13860 },{ date: '03-06-2013 Mon', dayT: 169709, nightT: 35611 }];
                onCompleteFunction(iteam);
        }
    }
);

function onCompleteFunction(data) { var dataSource = iteam; return dataSource; } alert(onCompleteFunction('iteam')); var dataSource = onCompleteFunction();

такой вариант не работает, а вот если то норм.

function onCompleteFunction(data) {
 var dataSource = [{ date: '01-06-2013 Sat', dayT: 65942, nightT: 13860 },{ date: '03-06-2013 Mon', dayT: 169709, nightT: 35611 }];
return dataSource;
 }
 alert(onCompleteFunction('iteam'));
var dataSource = onCompleteFunction();

1 Answers1

2

Немного теории:

JavaScript - это асинхронный язык, поэтому во время запроса на сайт, скрипт не блокируется, а продолжает выполнять свой сценарий.

Т.е. как работает скрипт:

Делается запрос на сайт, выводится сообщение alert(), присваивается переменная, а уже после того, как запрос на сайт был выполнен, переменной src присваивается значение.

По сути вам нужно присваивать переменной dataSource значение только после того, как сработает событие onComplete метода Ajax.Request().

function somefunction(){
    new Ajax.Request('index.php', {
        queue: {position: 'end', scope: 'command'},
        method: 'post',
        postBody: 'module=Reports&action=ReportsAjax&mode=ajax&file=ReportAutoHome&report=gr',
        onComplete: function(response) {
            src = response.responseText;
        onCompleteFunction(src);
    }
});

};

function onCompleteFunction(data) { alert(data); var dataSource = src; }

lampa
  • 18,094
  • Отлично работает! спс! А возможно что бы dataSource не был в функции ? – machanics Jul 26 '13 at 09:14
  • @machanics это просто как пример. Переменная dataSource может быть в обработчике события onComplete, т.е.:
    onComplete: function(response) {
        var dataSource = response.responseText;
    }
    
    – lampa Jul 26 '13 at 09:16
  • все ровно что то не так, я там изменил немного не глянешь сверху. – machanics Jul 26 '13 at 10:06
  • @machanics напиши словами, как ты видишь работу алгоритма. В этом кроется проблема. – lampa Jul 26 '13 at 12:02
  • Ajax.Request берет из php ({ date: '01-06-2013 Sat', dayT: 65942, nightT: 13860 }) и возвращает в dataSource а из него уже берет вот этот скрипт http://chartjs.devexpress.com/Demos/VizGallery/#chart/chartslineandpointseriesspline как то так – machanics Jul 26 '13 at 12:22
  • @machanics нет, давайте каждый шаг: аякс делает запрос на сервер, объявляется функция onCompleteFunction(), срабатывает alert(), переменной dataSource присваивается undefined, т.к. функция onCompleteFunction() ничего не возвращает. По завершению запроса к сайту в переменную iteam заносится массив и этот массив передается в вызываемую функцию onCompleteFunction(). – lampa Jul 26 '13 at 12:29
  • Наверно как то так или я чего то не догоняю. – machanics Jul 26 '13 at 13:04