我有一些使用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
关键字将定义范围为块的变量。
问题内容: 为什么最终控制台日志未定义?变量时间具有全局作用域,而ajax调用是异步的。 这是我的代码: 问题答案: 更改为布尔值false。 http://api.jquery.com/jQuery.ajax/ 另外,请注意,如果您需要在此处使用跨域,则将无法同步-请使用Promise。 使用Q.js在此处查看这样的示例: 演示
问题内容: 我有一个通过AJAX函数分配的变量。当我做作业时… 在发送之前响应返回给了我一个回音,如何添加回调以防止这种情况发生? 编辑:我要问的澄清。 它仍然返回未定义。我用send send函数在onreadystatechange函数上为变量分配变量,但是当我的代码正在执行时.. send()可以返回之前,response返回未定义状态。如何停止响应下的代码继续运行,直到分配了响应后才发送值
问题内容: 我在这里需要一些建议或一些解释。我有一个jquery ajax调用, 一切正常。我的回调响应正确触发。但是,我注意到的是,即使我的呼叫返回成功状态200,每次也会触发我的回调。在上面的回调中,我看到该对象是200。 谁能解释什么地方出了问题或这里发生了什么?回调应该仅在我有404或非200响应时触发。我的假设正确吗? 谢谢。 问题答案: 错误回调将在http错误时调用,但 如果响应上的
问题内容: 我正在尝试在jquery的AJAX调用中使用变量,但是它不起作用。移动变量包含不同的值。请检查以下代码: 建议在数据中使用$ move变量的任何方法。 问题答案: 它应该是
问题内容: 在回调函数之外使用全局变量的最佳方法是什么? 问题答案: 您提供的代码是完全有效的,并且实际上 可以 “保持”其价值。问题可能是异步运行的-仅 在 从服务器完全加载后才调用匿名函数。因此,现实世界中的执行顺序如下所示: 调用 (开始加载data.xml) 通话(目前仍为null) (data.xml中完成载入) 现在 匿名函数被调用时,其分配值给图标:。 如果你想要做一些事情的价值,
问题内容: 我希望此函数返回ajax调用是否成功。有什么办法可以做到吗?我下面的代码无法做到这一点。 问题答案: 不幸的是,您不能将值返回给包装异步回调的函数。取而代之的是,您从AJAX请求进行的成功回调会将数据和控制权移交给另一个函数。我在下面演示了这个概念: myFunction的定义: 回调函数定义: 调用myFunction: