Javascript для прохождения цикла в переменной подсчета [duplicate]

0
   for (var i=0 ; i<10 ; i++){

      var myFunction = function(something){
         console.log(i);
      }

      $.ajax({

        url: "something.json",
        dataType: "json",
        success: function( response ) {

               myFunction(response.something);

        }
      });               

    }

Как я могу получить доступ к последней я в myFunction каждый раз, когда цикл проходит через цикл for. Кажется, что последний я в myFunction недоступен, поэтому он не регистрируется с я = 0 до 9.

  • 0
    Вы создаете функцию и делаете вызов ajax внутри цикла?
  • 0
    Я хочу сделать 9 вызовов ajax, и для каждого вызова ajax я хочу вызвать myFunction и зарегистрировать i.
Теги:
for-loop

3 ответа

1

Это, вероятно, не самое эффективное решение. Но это действительно работает. Вы можете установить переменные объекта в запрос и получить к ним доступ с помощью.call на myFunction

for (var i=0 ; i<10 ; i++){

  var myFunction = function(something){
     console.log(this.localData.i);
  }

  $.ajax({
      url: "/echo/json/",
      dataType: "json",
      //Set the i variable to this request
      localData: {
          i: i
      },
      success: function( response ) {
        //call myFunction with this as the context, and you'll be able to access localData by using this.localData.i
        myFunction.call(this, response.something)
      }
  });               

}

Вот такая скрипка: http://jsfiddle.net/XxRAv/1/

0

Вы видите эффекты позднего связывания. Одним из решений является создание функции-оболочки и вызов ее, которая вернет правильную функцию:

  var myFunction = function(i){ 
     return function(something){ console.log(i); };
  }(i);
  • 0
    это не работает
0
      function myFunction(i,something){
         console.log(i);
         console.log(something);
      }

    for (var i=0 ; i<10 ; i++){
      $.ajax({

        url: "something.json",
        dataType: "json",
        success: function( response ) {

               myFunction(response.something);

        }
      });               

    }
  • 0
    это не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню