我的done回调只被调用一次,我不知道为什么
jquery my done callback gets only called one time i dont get why
/**
* 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;
}
添加了一个使用词法局部变量的新版本。还是不行。我现在有点迷路了……还添加了一个只被调用一次的日志语句。我希望日志被调用两次。
任何想法?
问题不在于你的完成回调被调用一次,但你改变相同的fingerprintPreview
每次它被调用,因为that
有循环结束的值当回调被调用。
解决方案是不重用这个外部声明的变量,而是一个新的,在你给each
的函数中声明:
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;
if (Object.keys(fingerprintPreview).length == Object.keys(linkNodes).length) {
alert("foo");
}
});
});
我发现了问题所在。Dystroys的回答是正确的,但并没有解决我最初的问题。所以事情是,当我在我的完成函数回调中有一个firebug断点时,它将只被调用一次。所以用firebug设置断点会导致无法解释的js代码…ffs !
相关文章:
- 为什么我的ajax在提交用@HtmlRenderPartial加载的表单时只调用fire一次
- 为什么我的$watch只烧过一次
- 为什么这个脚本只工作一次?只替换元素一次,然后再也不替换
- 为什么只打印一次?请给我解决方案
- JS:.apply(null,arguments)——为什么我的函数被调用一次,而console.log被调用多次
- 为什么这个 JavaScript switch 语句(在 for 循环内)保留了上一次迭代的值
- 为什么AS3 navigationToURL()只运行一次
- 为什么PHP一次发送所有内容
- 为什么我的引导工具提示的标题只会随着jQuery中的keydown事件而更改一次
- 为什么克隆只克隆一次项目
- 为什么我的代码可以在chrome上工作,而不是一次使用cordova编译
- 为什么将 ng-select 替换为自定义指令会导致$http请求不会每隔一段时间发送一次
- Angular 1.5.0 - 为什么工厂只调用一次
- 为什么这个简单的.js在一次迭代后循环停止
- 为什么 waitForKeyElements() 只触发一次,尽管后来进行了更改
- 允许用户添加表单输入字段:为什么 append() 只工作一次
- 为什么 JavaScript 函数只运行一次
- 为什么 console.log() 被调用两次而不是一次
- 在JS中交换id's -这只工作一次.为什么
- 滑块只滑动一次-为什么