gpt4 book ai didi

javascript - AJAX 回调中变量值错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:33 25 4
gpt4 key购买 nike

我有一些使用 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 中使用了不同的数字。

最佳答案

问题在于,当调用回调时,变量 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 值(查找“闭包”以更深入)。

在不久的将来,ES6 将不再需要这个技巧,因为 let 关键字将定义作用域为 block 的变量。

关于javascript - AJAX 回调中变量值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28066917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com