0

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

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

2 回答 2

1

在运行所有其他函数之后,您的 AJAX 回调需要一些时间才能返回。因此,该变量在函数使用时未设置。尝试设置asyncfalse. 然后您的代码将等到 AJAX 调用返回。或者,您可以从 AJAX 回调内部调用使用该变量的函数。

于 2013-04-24T04:02:22.357 回答
0

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

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

function loadServiceXml(){
    $.get("/xml/ServiceUrls.xml", function(xml){
        jsonServiceUrlObject = $.xml2json(xml);
        getMajorGroups();
    });
}
于 2013-04-24T03:43:48.343 回答