javascript - 在回调函数中获取变量值

标签 javascript jquery ajax

我有一个回调函数

function QueryKeyword(keyword, site, callback) {
  var querykeyword = keyword;
  var website = site;

  $.ajax({
    url: "http://www.test.com",
    jsonp: "jsonp",
    dataType: "jsonp",
    data: {
      Query: querykeyword
    },
    success: callback
  });
}

我像这样在 for 循环中调用这个函数:

for (i = 0; i < questionTerm.length; i++) {
  for (j = 0; j < site.length; j++) {
    var searchTerm = questionTerm[i] + ' ' + $('#search').val();

    QueryKeyword(searchTerm, site[j], function(reslt) {
      // I need to get j variable value here
      console.log(j);
    });

  }

}

现在我需要在函数中获取“j”变量值,看到我控制了 j 变量值,但它没有获取 j 变量值。

能否请您告诉我如何获取其中的值。

提前致谢

最佳答案

问题是,在您回调的那一刻,j 被多次重新分配给不同的东西。

您可以做一些选择。

  1. 使用您需要的参数调用您的回调

function QueryKeyword(keyword, site, index, callback) {
  // ...
  $.ajax(
      success: function(result) {
          // call the callback with a second param (the index j)
          callback(result, index);  
      }
  )
}

QueryKeyword(searchTerm, site[j], j, function(reslt, param) {
   // param is j
   console.log(result, param);
});

  1. 将变量保存在闭包中

(function() {
    var value = j;
    ...
})();

  1. 使用forEach

questionTerm.forEach((term, i) => {
    site.forEach((s, j) => {
        // we are in a closure, 
        // j will be correct here.
        QueryKeyword(term, s, function(reslt) {
          // j is still correct here
          console.log(j);
        });
    })
});

  1. 如果你使用 es6,你可以使用 let 关键字。 Here是一些很好的解释,它在使用 for 循环时是如何工作的

for(let i = 0; i < 10; i++) {
 console.log(i);
 setTimeout(function() {
   console.log('The number is ' + i);
 },1000);
}

关于javascript - 在回调函数中获取变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50470721/

相关文章:

javascript - 动态嵌套 JSON 对象

php - 测试PHP/jQuery/xHTML/CSS程序员…设置实时多用户(安全?)测试环境的最佳方法

javascript - Ajax 推进

php - Jquery Ajax 无法与 Laravel 分页正常工作

php - 动态加载 div 上的 Jquery

JavaScript - jest-haste-map : Haste module naming collision: {{name}}

javascript - 如何停止播放 YouTube 声音?

javascript - JavaScript 中是否有一种方法可以在相对较快的时间内获取大量 BigInt 类型的表示?

javascript - jquery 如何观察特定选择器在 dom 中的任何变化

javascript - 如何配置 webpack 不输出精简代码?