javascript - 封闭函数的封闭函数退出后调用 jquery (getJSON)

标签 javascript jquery getjson

我正在通过另一个函数调用函数中的一些jquery,该函数本身在按下按钮时调用。结果发现,直到原来的调用函数退出后,jquery对服务器的请求才被执行。效果是,添加的按钮最终被我期望在添加按钮之前运行的代码删除(该代码包含一个empty()命令)。请看一看。这里发生了什么?

function get_user_from_database() {
  var user_name_search_string = $("#user_name_search_string").val();
  $.getJSON($SCRIPT_ROOT + '/get_user_for_admin_purposes', {
    user_name_search_string: user_name_search_string
  }, function(data) {
    var userNode = $("#list_of_users");
    userNode.empty();
    for (var i = 0; i < data.users.length; i++) {
      var cb = document.createElement("input");
      cb.type = "radio";
      cb.value = data.users[i].user_ID;
      cb.checked = false;
      cb.name = "selected_user";
      userNode[0].appendChild(cb);
      var theTxt = document.createTextNode(data.users[i].user_name);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("Date joined : " + data.users[i].date_joined);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("User Role : " + data.users[i].role);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("User Email : " + data.users[i].email);
      userNode[0].appendChild(theTxt);
      var p = document.createElement("p");
      userNode[0].appendChild(p);
    }
  });
}


$(function() {
  $('#user_name_search_button_assign_moderator').on('click', function(e) {
    get_user_from_database();
    var userNode = $("#list_of_users");
    var aButton = document.createElement("input");
    aButton.type = "submit";
    aButton.value = "Assign Moderator Status";
    aButton.id = "assign_mod_status_button"
    userNode[0].appendChild(aButton);
  });
});

最佳答案

function get_user_from_database(callback) {
  var user_name_search_string = $("#user_name_search_string").val();
  $.getJSON($SCRIPT_ROOT + '/get_user_for_admin_purposes', {
    user_name_search_string: user_name_search_string
  }, function(data) {
    var userNode = $("#list_of_users");
    userNode.empty();
    for (var i = 0; i < data.users.length; i++) {
      var cb = document.createElement("input");
      cb.type = "radio";
      cb.value = data.users[i].user_ID;
      cb.checked = false;
      cb.name = "selected_user";
      userNode[0].appendChild(cb);
      var theTxt = document.createTextNode(data.users[i].user_name);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("Date joined : " + data.users[i].date_joined);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("User Role : " + data.users[i].role);
      userNode[0].appendChild(theTxt);
      var br = document.createElement("br");
      userNode[0].appendChild(br);
      var theTxt = document.createTextNode("User Email : " + data.users[i].email);
      userNode[0].appendChild(theTxt);
      var p = document.createElement("p");
      userNode[0].appendChild(p);
    }

    callback();
  });
}


$(function() {
  $('#user_name_search_button_assign_moderator').on('click', function(e) {
    get_user_from_database(function() {
      var userNode = $("#list_of_users");
      var aButton = document.createElement("input");
      aButton.type = "submit";
      aButton.value = "Assign Moderator Status";
      aButton.id = "assign_mod_status_button"
      userNode[0].appendChild(aButton);
    });
  });
});

关于javascript - 封闭函数的封闭函数退出后调用 jquery (getJSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35300045/

相关文章:

javascript - 在与 WebPack 捆绑在一起的 Visual Studio 中调试 JavaScript 代码

JavaScript RegEx 替换超过 2 个重复字符

javascript - 如何对调用 getJSON 的 javascript 函数进行单元测试

javascript - getJSON在chrome上本地加载json数据文件时出错

javascript - 更改 OpenCV.js 中的像素值

javascript - 在页面加载时使用 Javascript 或 jQuery 删除 div 类

表的 jQuery css 选择器

javascript - jQuery 对象序列化

php - jQuery ajax 不会将 post 变量发送到 WordPress

Javascript ,范围问题...不是很有经验的 javascript