for循环问题与ajax成功

时间:2015-10-01 10:14:05

标签: javascript ajax

我在for循环中调用ajax函数。但我在ajax成功中得到1fiddle

function a(){
var myAr= [0];
    for(var i=0; i<myAr.length;i++){
                console.log(i +" a")
    var root = 'http://jsonplaceholder.typicode.com';
        $.ajax({
          url: root + '/users',
          method: 'GET'
        }).then(function(data) {

        console.log(i + " c")

        });

                console.log(i + " b")
    }

}

a()

3 个答案:

答案 0 :(得分:1)

只有在收到AJAX的响应时才会执行.then()

此时,我是1,因为foor循环结束了。

如果在创建AJAX请求时需要原始值,则可以在本地范围上创建一个新变量,其值为i。这样,在.then()方法内执行的闭包具有原始值。

Updated fiddle.

答案 1 :(得分:1)

你必须为此使用闭包,否则它将评估为i执行的最后一个值

 function a(){
var myAr= [0];
  for(var i=0; i<myAr.length;i++){
            console.log(i +" a")
    var root = 'http://jsonplaceholder.typicode.com';
    $.ajax({
      url: root + '/users',
      method: 'GET'
    }).then(function(i) {return function(data) {
    console.log(i + " c")

    }}(i));

            console.log(i + " b")
}

}

a()

答案 2 :(得分:0)

根据您的代码app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { $routeProvider.when ('/jobs', {templateUrl: 'jobs-partial.html', controller: JobsCtrl }). when ('/invoices', {templateUrl: 'invoices-partial.html', controller: InvoicesCtrl }). when ('/payments', {templateUrl: 'payments-partial.html', controller: PaymentsCtrl }). otherwise({redirectTo: '/jobs'}); // make this demo work in plunker $locationProvider.html5Mode(false); }]); 仅在ajax调用完成时执行。对于这种功能,您必须以不同的方式触发它。

这是一个有效的demo

console.log(i + " c")