Javascript 用作标志的全局变量

Javascript global variables used as flags

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

此函数在完成时将标志设置为 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 调用。我不确定如何完成此操作。我在考虑 while 循环(轮询的想法)但不确定如何去做。

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

实现此目的的最佳方法是使用回调。 您只需在第一个函数响应后调用第二个函数即可。

您应该使用 'done' 而不是 'complete'。

   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 循环,一切正常。