jQuery .ajax()访问JavaScript循环中beforeSend本地变量

3


我有一个 jQuery ajax Get 调用,它位于 for 循环内。
这是代码:

    var number_of_ping_for_average = 4;
var ping_start_time;
    for(i = 0; i++; i < number_of_ping_for_average){

                $.ajax({
                    type: 'GET',
                    url: "http://www.exmple.com/pkt.ext",
                    timeout: 1000,
                    cache: false,
                    beforeSend: function(){
                        ping_start_time[i][new Date().getTime()];
                    },
                    success: function (data) {
                        var ping_arrive_time = new Date().getTime();
                        var ping_val = ping_arrive_time - ping_start_time[i];
                    },
                    error: function(data){
                        //timeout or 500 error
                        //@TODO fare funzionare tutto
                    }
                });
            }

正如您所看到的,我需要在匿名函数内调用变量"i"...但是不起作用
请记住,ping_start_time必须包含3个不同的同时值!


1
https://dev59.com/v3RB5IYBdhLWcg3wAjNH - Arun P Johny
2
for(i = 0; i < 平均次数的数量; i++) - Saty
可以使用$.each创建闭包,而不是使用for循环。 - charlietfl
2个回答

3

创建一个单独的函数用于Ajax调用,这样可以确保i的值在该范围内不会改变。

  var number_of_ping_for_average = 4;
    var ping_start_time=[];

    function callsAjax(i){
        $.ajax({
        type: 'GET',
        url: "http://www.exmple.com/pkt.ext",
        timeout: 1000,
        cache: false,
        beforeSend: function(){
          ping_start_time[i][new Date().getTime()];
         },
        success: function (data) {
          var ping_arrive_time = new Date().getTime();
          var ping_val = ping_arrive_time - ping_start_time[i];
         },
         error: function(data){
           //timeout or 500 error
          //@TODO fare funzionare tutto
         }
      });
    }

    for(i = 0;i < number_of_ping_for_average;i++){
        callsAjax(i)                    
    }

2

最好的方法是使用包装器
例如:

(function (){
 console.log("test n." + i);
})(i)

非常感谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接