用作标志的Javascript全局变量

Javascript global variables used as flags

本文关键字:Javascript 全局变量 标志      更新时间:2024-06-15

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

此函数在完成时将标志设置为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")
   }})
  } 
}

实现这一点的最佳方法是使用回调。您只需要在第一个函数的响应之后调用第二个函数。

您应该使用"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循环,一切都应该正常。