我创建了一个模拟我在实际页面上遇到的问题的测试页面。
正如您在 中看到的doSomething2()
, dfd 对象故意从未被解析。但是,当我运行以下代码时,.done()
indoSomething()
总是会触发。检查控制台,您会在运行之前看到这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 的。我刚刚创建了这个例子来复制我的问题。我正在开发一个 Web 应用程序,该应用程序旨在从一个 html 文件在本地运行。在这种情况下,没有严格遵守 SOP,所以至少测试应该没问题。
编辑:我创建了一个 jsfiddle 来测试这种行为:http: //jsfiddle.net/Sgwpv/2/