2013-04-24 2 views
0

У меня есть следующие js. Проблема в том, что я не могу получить доступ к переменной jasonServiceUrlObject в функции getMajorGroups. Я объявил переменную глобально, но firebug выдает неопределенную ошибку при запуске предупреждения!Ошибка при доступе к глобальной переменной в jQuery

var jsonServiceUrlObject = null; 

function loadServiceXml(){ 
    $.get("/xml/ServiceUrls.xml", function(xml){ 
     jsonServiceUrlObject = $.xml2json(xml); 

    }); 
} 

function getMajorGroups(){ 
    var element = $(".item-group-button").first(); 

    var serviceUrl = getServiceURL("getAllMajorGroups") 
    alert(jsonServiceUrlObject.service[1].service_key); 
    $.get(serviceUrl , function(data){ 
    if(data.majorGroups.length != 0){ 
     $('.panel_list').empty(); 
     element.empty(); 
    } 
    for(var i = 0; i < data.majorGroups.length; i++){ 
     var clone = element.clone(); 
     clone.append("<h3>" + data.majorGroups[i].description + "</h3>"); 
     clone.attr("id", data.majorGroups[i].majorGroupId); 
     $('.panel_list').append(clone); 
    } 
    }); 
} 
+1

AJAX: ** Асинхронный ** JavaScript и XML. – elclanrs

+1

'};' в конце функции 'loadServiceXml' может быть typo –

+0

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

ответ

0

Вы должны установить переменную перед ее ссылкой, просто объявив, что этого недостаточно. Вы не указали весь свой код, но я предполагаю, что этого не происходит.

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

function loadServiceXml(){ 
    $.get("/xml/ServiceUrls.xml", function(xml){ 
     jsonServiceUrlObject = $.xml2json(xml); 
     getMajorGroups(); 
    }); 
} 
1

Обратный вызов AJAX требует времени, чтобы вернуться, после выполнения всех других функций. Следовательно, переменная не устанавливается, когда функция использует ее. Попробуйте установить async на false. Затем ваш код будет ждать, пока не вернется вызов AJAX. ИЛИ вы можете вызывать функцию, использующую переменную из обратного вызова AJAX.

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