Javascript jquery我的done回调只被调用一次我不明白为什么
添加了一个新版本,该版本使用词法局部变量。仍然不起作用。 我现在有点不知所措。。。 还添加了一个只调用一次的日志语句。 我希望日志会被调用两次Javascript jquery我的done回调只被调用一次我不明白为什么,javascript,jquery,Javascript,Jquery,添加了一个新版本,该版本使用词法局部变量。仍然不起作用。 我现在有点不知所措。。。 还添加了一个只调用一次的日志语句。 我希望日志会被调用两次 有什么想法吗?问题不在于调用了一次已完成的回调,而是每次调用时都会更改相同的fingerpreview,因为调用callbak时,具有循环结束的值 解决方案是不重用这个外部声明的变量,而是在给每个的函数中声明一个新变量: /** * Downloads the fingerprint preview data */ this.fetchFinger
有什么想法吗?问题不在于调用了一次已完成的回调,而是每次调用时都会更改相同的
fingerpreview
,因为调用callbak时,具有循环结束的值
解决方案是不重用这个外部声明的变量,而是在给每个的函数中声明一个新变量:
/**
* Downloads the fingerprint preview data
*/
this.fetchFingerprintPreviews = function (url) {
var that = this;
var dfd = jQuery.Deferred();
jQuery.get(url)
.done(function (resp) {
var linkNodes = conn.getLinksViaRelation(resp,
'http://ws.bdr.de/webhd/hdcap/rels/finger-preview/');
jQuery(linkNodes).each(function () {
var link = jQuery(this);
var fpIndex = link.prev("index, bdr\\:index").html();
var fpType = link.attr('type');
jQuery.get(link.attr('href'), {"encoding":"base64"}, null, "text")
.done(function (imageDataBase64) {
fingerprintPreview[fpIndex] = {};
fingerprintPreview[fpIndex].imageData = imageDataBase64;
fingerprintPreview[fpIndex].type = fpType;
console.log(fingerprintPreview);
if (Object.keys(fingerprintPreview).length ==
Object.keys(linkNodes).length) {
dfd.resolve();
}
});
});
});
return dfd;
}
问题不在于调用了一次done回调,而是每次调用时都会更改相同的fingerprintPreview
,因为调用callbak时,
的值为end of loop
解决方案是不重用这个外部声明的变量,而是在给每个的函数中声明一个新变量:
/**
* Downloads the fingerprint preview data
*/
this.fetchFingerprintPreviews = function (url) {
var that = this;
var dfd = jQuery.Deferred();
jQuery.get(url)
.done(function (resp) {
var linkNodes = conn.getLinksViaRelation(resp,
'http://ws.bdr.de/webhd/hdcap/rels/finger-preview/');
jQuery(linkNodes).each(function () {
var link = jQuery(this);
var fpIndex = link.prev("index, bdr\\:index").html();
var fpType = link.attr('type');
jQuery.get(link.attr('href'), {"encoding":"base64"}, null, "text")
.done(function (imageDataBase64) {
fingerprintPreview[fpIndex] = {};
fingerprintPreview[fpIndex].imageData = imageDataBase64;
fingerprintPreview[fpIndex].type = fpType;
console.log(fingerprintPreview);
if (Object.keys(fingerprintPreview).length ==
Object.keys(linkNodes).length) {
dfd.resolve();
}
});
});
});
return dfd;
}
我发现了问题所在。dystroys的回答是正确的,但并没有解决我最初的问题。所以问题是,当我在我的完成函数回调中有一个firebug断点时,它将只被调用一次。因此,使用firebug设置断点可能会导致js代码出人意料。。。ffs 我发现了问题所在。dystroys的回答是正确的,但并没有解决我最初的问题。所以问题是,当我在我的完成函数回调中有一个firebug断点时,它将只被调用一次。因此,使用firebug设置断点可能会导致js代码出人意料。。。ffs 检查控制台是否有错误。但在控制台上,我甚至看到两个请求发出。所有返回的200jquery版本1.9都在这里(primefaces)检查控制台是否有错误。但在控制台上,我甚至看到两个请求发出。所有返回的200jquery 1.9版(primefaces)都添加了我的新函数代码。断点只被调用一次。但是我在comsole日志中看到了两个http调用。添加了我的新函数代码。断点只被调用一次。但是我在comsole日志中看到了两个http调用。