2011-02-09 8 views
0

私は自分の実際のページで問題を模倣したテストページを作成しました。jQuery 1.5:DeferredオブジェクトがUNRESOLVED状態の.done()を呼び出すのはなぜですか?

doSomething2()のように、dfdオブジェクトは意図的に解決されません。ただし、次のコードを実行すると、doSomething().done()が常に発生します。コンソールを調べると、は、.done()が実行される直前にfalseであることがわかります。

洞察?すべてのヘルプは

<!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/

答えて

1

あなたの問題ではなく、関数をの.doneする声明の中で、この通過で

ライブexample

を見ます内部的には、.doneは関数のリストを取り、コールバック配列にプッシュします。

callbacks.push(elem);

あなたはelemとして文でパスし、自分は機能ではなく、コールバックアレイに(この場合はundefined中)文の戻り値をプッシュ

callbacks.push(alert("foo"));

を取得します。

+0

ゲットしました!助けてくれてありがとう – ampersand

関連する問題