当前位置: 首页 > 面试题库 >

AJAX回调中变量的值错误

令狐灿
2023-03-14
问题内容

我有一些使用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: