我在for循环中调用ajax函数。但我在ajax成功中得到1
。 fiddle
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()
答案 0 :(得分:1)
只有在收到AJAX的响应时才会执行.then()
。
此时,我是1,因为foor循环结束了。
如果在创建AJAX请求时需要原始值,则可以在本地范围上创建一个新变量,其值为i
。这样,在.then()
方法内执行的闭包具有原始值。
答案 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")