2013-03-06 5 views
1

Я создал небольшое приложение JavaScript с помощью следующей функции, которая вызывает функцию для извлечения JSON данных:Передача данных из переменных в JavaScript

var months = function getMonths(){ 

$.getJSON("app/data/Cars/12Months", function (some_data) { 
    if (some_data == null) { 
     return false; 
    } 

    var months_data = new Array(); 
    var value_data = new Array(); 

    $.each(some_data, function(index, value) { 
     months_data.push(index); 
     value_data.push(value); 
    }); 

    return[months_data,value_data]; 
}); 

}

Я тогда создан, в том же файле , другая функция, которая делает что-то, когда загружается конкретная страница. В этой функции переменная 'months' передается переменной result.

$(document).on('pageshow', '#chartCar', function(){ 

$(document).ready(function() { 


    var result = months; 
    var date = result[0]; 
    var values = result[1]; 

//more code here... 

}); 
} 

проблема заключается в том, что на основе отладчика, то getMonths() функция работает отлично и производит ожидаемый выход, но «результат» переменный во второй функции не может получить значение, переданное ему переменная «месяцы». Вы знаете, как решить эту проблему?

+0

Не могли бы вы объяснить? – Anto

ответ

2

Проблема заключается в том, что вы $.getJSON() функция является асинхронным, так что ваши данные получает загружены позже, то вы его прочитать. Возможны два способа:
1. Замените $.getJSON на $.ajax и установите async: false;
2. Поместите свой код в $.getJSON обратного вызова:

var months = function getMonths(){ 

$.getJSON("app/data/Cars/12Months", function (some_data) { 
    if (some_data == null) { 
     return false; 
    } 

var months_data = new Array(); 
var value_data = new Array(); 

$.each(some_data, function(index, value) { 
    months_data.push(index); 
    value_data.push(value); 


}); 

var date = months_data; 
var values = value_data; 
//more code here.. 
    }) 
    } 
0

Ошибка при синтаксисе.

заменить

}); 
} 

С

}); 
}); 
0

$.getJSON() является оберткой $.ajax, который является асинхронным по умолчанию. Но вы относитесь к ней как к вызову синхронизации.

Вы можете использовать $.ajaxSetup()

$.ajaxSetup({ "async": false }); 
$.getJSON(...) 
$.ajaxSetup({ "async": true }); 

или использовать $.ajax с async: false

$.ajax({ 
    type: 'GET', 
    url: 'app/data/Cars/12Months', 
    dataType: 'json', 
    async: false, 
    success: function(some_data) { 
     //your code goes here 
    } 
}); 

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

Смежные вопросы