我已經創建了一個模擬我在實際頁面上遇到的問題的測試頁。jQuery 1.5:爲什麼Deferred對象在UNRESOLVED狀態下調用.done()?
正如您在doSomething2()
中看到的那樣,dfd對象故意從未解決。但是,當我運行以下代碼時,doSomething()
中的.done()
始終會觸發。檢查控制檯,你會看到dfd.isResolved()
是false正好在.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。我剛剛創建了這個例子來複制我的問題。我正在開發一個Web應用程序,旨在從一個HTML文件本地運行。在這種情況下,SOP沒有嚴格遵守,所以這應該是至少可以測試。
編輯:我創建了一個的jsfiddle來測試此行爲:http://jsfiddle.net/Sgwpv/2/
明白了!非常感謝您的幫助 – ampersand 2011-02-09 17:22:02