Я создал тестовую страницу, которая имитирует проблему, возникающую на моей реальной странице.
Как видно из doSomething2()
, объект dfd сознательно никогда не разрешается.Однако, когда я запускаю следующий код, .done()
в doSomething()
всегда срабатывает.Осмотрев консоль, вы увидите, что 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>
edit: Я ПОНИМАЮ, что эта функция ничего не выполняет.Я только что сделал пример, чтобы повторить мою проблему.Я ПОНИМАЮ, что получение "google.com" против СОП.Я только что создал этот пример, чтобы повторить мою проблему.Я занимаюсь разработкой веб-приложения, которое предназначено для локального запуска из одного HTML-файла.В этом случае SOP строго не соблюдается, так что, по крайней мере, все должно быть в порядке.
edit: я создал jsfiddle для проверки этого поведения: http://jsfiddle.net/Sgwpv/2/