Javascript AJAX回调中变量的值错误

Javascript AJAX回调中变量的值错误,javascript,json,Javascript,Json,我有一段代码使用JSON检查增值税号码 我需要知道哪些增值税号码是正确的 BTW[0] = 'NL1234567890'; BTW[1] = 'NL1233537891'; BTW[2] = 'NL1232346894'; var arraylength = BTW.length; for (var i = 0; i < arraylength; i++) { var BTWnummer = BTW[i]; callUrl = 'http://isvat.appspot.

我有一段代码使用JSON检查增值税号码

我需要知道哪些增值税号码是正确的

BTW[0] = 'NL1234567890';
BTW[1] = 'NL1233537891';
BTW[2] = 'NL1232346894';

var arraylength = BTW.length;

for (var i = 0; i < arraylength; i++) {
  
 var BTWnummer = BTW[i];
 
 callUrl = 'http://isvat.appspot.com/'+Land+'/'+BTWnummer+'/?callback=?';
 
 $.getJSON(callUrl, BTWnummer, function(data){
 alert(data+' '+BTWnummer);
 
 });
 
}
BTW[0]=“NL1234567890”;
顺便说一句[1]=“NL1233537891”;
顺便说一句[2]=“NL1232346894”;
var arraylength=BTW.长度;
对于(变量i=0;i

数据变量返回true或false。但是我无法在从JSON返回的函数中获得正确的BTWnummer。它总是保留一个BTW号码。我认为JSON是异步的,那么如何在JSON代码中获得正确的数字呢?根据我的测试,它确实在callUrl中使用了不同的数字。

问题是在调用回调时变量
BTWnummer
发生了变化,因为循环在异步回调之前完全执行

您可以将其值保存在立即调用的函数中:

for (var i = 0; i < arraylength; i++) {
   (function(BTWnummer){
      var callUrl = 'http://isvat.appspot.com/'+Land+'/'+BTWnummer+'/?callback=?';
      $.getJSON(callUrl, BTWnummer, function(data){
         alert(data+' '+BTWnummer);
      });
   })(BTW[i]);
}
for(变量i=0;i
这是因为JavaScript中变量的作用域是函数执行。
f
的不同执行存储了
BTWnummer
的不同值(查找“closure”以更深入)


在不久的将来,ES6将不再需要这种技巧,因为
let
关键字将定义范围为块的变量。

国家代码,它包含在下拉列表中的变量中。在本例中,NL(不是每个增值税号码都以国家代码开头,或者用户忘记添加国家代码)。您可能应该在
callUrl
前面添加
var
。谢谢,这似乎有效!你能解释一下最新的比特(顺便说一句[i])是如何产生的吗;作品它不在功能范围内,但仍然有效?啊,是的!我现在知道你可以用这样的参数编写未命名的函数。嗯,不知怎么的,它现在总是返回true。它似乎确实起了一秒钟的作用。没有更改代码。但我认为问题在于我调用的URL。它“返回”true是什么意思?它在哪里还东西?数据变量返回true或false。现在,即使我输入了一个错误的增值税编号,它也总是返回true。我正在测试是什么导致了这一点。试图做一个jsfiddle,但似乎失败了。
function f(BTWnummer){
  var callUrl = 'http://isvat.appspot.com/'+Land+'/'+BTWnummer+'/?callback=?';
  $.getJSON(callUrl, BTWnummer, function(data){
     alert(data+' '+BTWnummer);
  });
}
for (var i = 0; i < arraylength; i++) {
    f(BTW[i]);
}