在jquery中访问全局变量时出错

时间:2013-04-24 03:39:47

标签: javascript jquery

我有以下js。问题是,我无法访问getMajorGroups函数中的变量jasonServiceUrlObject。我已经全局声明了变量,但是当警报运行时,firebug会抛出一个未定义的错误!

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);
    }
  });
}

2 个答案:

答案 0 :(得分:1)

在运行所有其他功能之后,您的AJAX回调需要一些时间才能返回。因此,当函数使用它时,不会设置变量。尝试将async设置为false。然后你的代码将一直等到AJAX调用返回。或者您可以在AJAX回调中调用使用该变量的函数。

答案 1 :(得分:0)

您必须在引用变量之前设置变量,只是声明它是不够的。您没有显示所有代码,但我猜这不会发生。

请注意,在第二个函数之前运行第一个函数是不够的,因为变量是在回调中定义的。如果你想连续运行这些函数,你应该在第一个函数的回调中调用第二个函数。

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