用作标志的Javascript全局变量

时间:2015-02-26 17:28:02

标签: javascript loops global-variables

我正在尝试使用全局变量作为标志,并且无法使其工作。我有两个功能:

此函数在完成后将标志设置为false。

function buildYearsTable(btn) {
  //console.log ("At build years table")
  var fundCode = document.getElementById("fundCode").value
  buildYearsFlag = true;
  $.ajax({url: "/scholarship/scholarshipMaintenance/buildYearsTable", method: "POST", 
    cache: false, data: {fundCode: fundCode},
    complete: function(xhr, statusCode){
      console.log("inside build years table")
      data = $.parseJSON(xhr.responseText)
      $('#myTable tbody').html('');
      data = data.sort()
      data = data.reverse()
      for(var i = data.length - 1; i >= 0; i--) {
        moveYearOption(data[i])
        addYearRow(data[i])
      }
      buildYearsFlag = false;
      //$('#yearsTable').html(xhr.responseText)
      console.log("done in build years table")
  }})
}

当调用第一个函数时调用此函数,但是只有在第一个函数将标志设置为false时,我才需要它来执行其ajax调用。我不知道如何做到这一点。我正在考虑一个循环(轮询一种想法),但不知道如何去做。

function rebuildYearSelects(btn) {
  //console.log ("At rebuild selects")
  var fundCode = document.getElementById("fundCode").value
  while (buildYearsFlag == false) {
    $.ajax({url: "/scholarship/scholarshipMaintenance/rebuildYearSelects", method: "POST", 
      cache: false, data: {fundCode: fundCode},
      complete: function(xhr, statusCode){
        console.log("got inside rebuild years select")
        data = $.parseJSON(xhr.responseText)

        selectedYears = data.sortedSelectedYears
        unselectedYears = data.sortedUnselectedYears

        $('#yearsModal').replaceWith(data.html)
        fixModals();
        buildYearsFlag = true;
        console.log("done in rebuildYearSelects")
   }})
  } 
}

1 个答案:

答案 0 :(得分:1)

实现此目标的最佳方法是使用回调。 你只需要在第一个函数响应之后调用第二个函数。

你应该使用' done'而不是完成'。

   function buildYearsTable(btn) {
      var fundCode = document.getElementById("fundCode").value

      $.ajax({url: "/scholarship/scholarshipMaintenance/buildYearsTable", method: "POST", 
        cache: false, data: {fundCode: fundCode},
        done: function( data ){

            // Your code goes here

            // Call the function only after the response
            rebuildYearSelects();

      }})
    }

HTML:

onclick="buildYearsTable();"

删除标志和while循环,一切都应该有效。