0

私は次の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);
    }
  });
}
4

2 に答える 2

1

他のすべての関数が実行された後、AJAX コールバックが戻るまでに時間がかかります。したがって、関数が使用する場合、変数は設定されません。に設定asyncしてみてくださいfalse。その後、コードは AJAX 呼び出しが戻るまで待機します。または、AJAX コールバック内から変数を使用する関数を呼び出すことができます。

于 2013-04-24T04:02:22.357 に答える
0

変数を参照する前に変数を設定する必要があり、宣言するだけでは不十分です。すべてのコードを表示していませんが、それは起こっていないと思います。

変数はコールバック内で定義されているため、最初の関数を 2 番目の関数の前に実行しても十分ではないことに注意してください。これらの関数を連続して実行したい場合は、最初のコールバック内から 2 番目を呼び出す必要があります。

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