我有一些使用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);
});
}
数据变量返回true或false。但是我无法在从JSON返回的函数中获得正确的BTWnummer。它始终保持1个BTW数字。我认为JSON是异步的,那么如何才能在JSON代码中获得正确的数字?根据我的测试它确实使用callUrl中的不同数字。
答案 0 :(得分:5)
问题是调用回调时变量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]);
}
如果难以阅读,可以采用另一种方式将其与命名函数(而不是匿名函数)放在一起:
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]);
}
这是有效的,因为JavaScript中变量的范围是函数执行。 f
的不同执行存储BTWnummer
的不同值(查找&#34;关闭&#34;更深入)。
在ES6的不久的将来,由于let
关键字将定义范围为块的变量,因此不再需要这个技巧。