javascript - 没有显示正确的数字

标签 javascript

我有一个类似 Linux 控制台的游戏代码,我正在执行命令 ping。

When I want the code to display icpm_seq 0/1/2/3, it just shows icpm_seq 4.

代码:

function ping(IP){
   for (var i = 0; i <= 3; i++) {
       var start = new Date().getTime();
       $.post("data_script/ping.php?IP=" + IP,
       function(data){
          var newTime = new Date().getTime() - start;
          // 0: bad (isn't online)
          // 1: good (is online)
          // 2: bad hostname
          if(data == 0)
          {
              outputToConsole("Request timeout for icmp_seq " + i)
          }
          else
          {
              if(data == 1)
              {
                 outputToConsole("64 bytes from " + IP + ": icmp_seq=" + i + " ttl=64 time: " + newTime + "ms");
              }
              else
              {
                  outputToConsole("ping: Cannot resolve hostname " + IP + ": unknown host")
              }
          }
        });
      }
   }      

最佳答案

欢迎使用异步编程...当 ping 返回时调用回调函数时,循环已结束,i 为 4。

发生的事情是

for i=0, i is <=3
calls ping
for i++, i is now 1, is <=3 
calls ping
for i++ , i is now 2, is <=3 
calls ping
for i++ , i is now 3, is <=3 
calls ping
for i++ , i is now 4, is > 3
breaks 
callback from ping 0
callback from ping 1
callback from ping 2
callback from ping 3

要克服这个问题,请将回调放在闭包中,如下所示

(function(seq) { 
  $.post("ping.php?IP=" + IP,function(data){
    log("icmp_seq " +seq+" returns "+data);
  }
})(i);

关于javascript - 没有显示正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951746/

相关文章:

javascript - 是否有一个 gulp watch 替代方案,仅在保存 scss 文件时才编译 sass ?

javascript - Leaflet 未读取外部 geojson 或 JS

javascript - Ember.js - 无法对不在 DOM 中的 Metamorph 执行操作

javascript - 复选框切换页面 View

php - 如何在页面加载后立即提交表单

javascript - 使用 Firebug ,js错误显示在哪里?

javascript - XSL 在 IE 中处理片段

javascript - 如何隐藏包含许多 HTML 元素的页面上不可见 View 中的内容以提高性能?

javascript - querySelectorAll 未选择所有元素

javascript - 访问 Angular 站点上的 <a> 元素