実際のページで発生している問題を模倣したテストページを作成しました。
でわかるようにdoSomething2()
、dfdオブジェクトは意図的に解決されることはありません。ただし、次のコードを実行すると、.done()
inはdoSomething()
常に起動します。コンソールを調べると、実行直前にそれdfd.isResolved()
が誤り.done()
であることがわかります。
洞察はありますか?どんな助けでも大歓迎です
<!DOCTYPE html>
<html>
<head>
<title>Testing Page</title>
<script src="jquery-git-02092011.js" type="text/javascript"></script>
</head>
<body>
<div id="test">
<div ></div>
<div ></div>
</div>
<script>
function doSomething() {
$('#test div').each(function(){
$(this).append($('<div></div>').load('http://www.google.com',function(){
doSomething2().done(console.log('dosomething2 is complete'));
}))
});
}
function doSomething2() {
var dfd = $.Deferred();
console.log(dfd.isResolved());
return dfd;
}
$(document).ready(function() {
doSomething();
});
</script>
</body>
</html>
編集:私はこの関数が何も達成しないことを理解しています。問題を再現するための例を作成しました。'google.com'の取得はSOPに反することを理解しています。問題を再現するために、この例を作成しました。1つのhtmlファイルからローカルで実行することを目的としたWebアプリを開発しています。この場合、SOPは厳密に守られていないため、少なくともテストは問題ありません。
編集:この動作をテストするためにjsfiddleを作成しました:http: //jsfiddle.net/Sgwpv/2/