Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery我的done回调只被调用一次我不明白为什么_Javascript_Jquery - Fatal编程技术网

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调用。