Задать данные для Google Chart внутри функции анализа JQuery Ajax Json? - PullRequest
0 голосов
/ 30 января 2012

У меня есть следующая функция jquery:

function doReport(query) {
   var rowArray = [];
   $.ajax({
        url: 'http://xxxxxxx' + query,
        dataType: 'json',
        success: function(data) {
            var sales = $('#salesDiv');
            sales.html('');
            for (res in data['sales']) {
                sales.append('<div>' + data['sales'][res]['contractName'] + ' : $' + data['sales'][res]['salesAmount'] + '</br></div><br />');
                rowArray.push([data['sales'][res]['contractName'],data['sales'][res]['salesAmount']]);
                    alert("this works! "+rowArray[0]);
            }
        }
    });
    alert("this doesnt work "+rowArray[0]);
    drawChart(rowArray);

Мой вопрос в моем первом предупреждении (это работает!), Я вижу значение rowArray.Однако во втором предупреждении (это не работает) значения возвращаются как неопределенные.

Что я делаю неправильно?пожалуйста помоги!Я хочу передать значения в мою функцию drawChart и получить мою хорошую круговую диаграмму Google!

1 Ответ

0 голосов
/ 30 января 2012

В основном $.ajax работает асинхронно. Так что ваш код может не всегда работать.

Звоните drawChart внутри обратного вызова.

function doReport(query) {
   var rowArray = [];
   $.ajax({
        url: 'http://xxxxxxx' + query,
        dataType: 'json',
        success: function(data) {
            var sales = $('#salesDiv');
            sales.html('');
            for (res in data['sales']) {
                sales.append('<div>' + data['sales'][res]['contractName'] + ' : $' + data['sales'][res]['salesAmount'] + '</br></div><br />');
                rowArray.push([data['sales'][res]['contractName'],data['sales'][res]['salesAmount']]);
                    alert("this works! "+rowArray[0]);
            }
            drawChart(rowArray);
        }
    });
    alert("this doesnt work "+rowArray[0]);
    //drawChart(rowArray); - moved

отредактировано

К вашему сведению, из документа API jQuery (http://api.jquery.com/jQuery.ajax/)

Первая буква в Ajax обозначает "асинхронный", означает, что операция происходит параллельно и порядок выполнения не гарантируется . Параметр async для $ .ajax () по умолчанию имеет значение true, указывая выполнение этого кода может продолжаться после выполнения запроса. Настройка эта опция ложна (и, следовательно, делает вызов больше не асинхронным) настоятельно не рекомендуется , так как это может привести к тому, что браузер станет отвечать на запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...