2009-07-01 38 views
2

特に$ .getJSON()を使用すると問題が発生します。私はそれが内部でjQueryの機能を実行しません()reload_dataを呼び出すときJavascript関数を使用したjQuery関数の呼び出し

function reload_data() { 
    $.getJSON("data/source", function(data) { 
     $.d = data; 
    }); 
} 

しかし:私はそうのようなJavascriptの機能にjQueryのgetJSONから機能をラップします。何か案は?

+0

機能を実行していないことをどのように知っていますか?チェックするために中にブレークポイントを入れましたか? – Nosredna

+0

これは正常に実行されています。 $ .d変数のデータが、スクリプトの残りの部分が使用できるようにリフレッシュされていないデータでなければならないと思います。 – mcmaloney

+0

あなたは正確な答えを出すのに十分な写真を私たちに提示していません。 –

答えて

2

機能が呼び出されたことを知るためのアラートを側に置きます。

とあなたが十分を告げていないエラー

function reload_data() { 
    alert('reload_data start'); 
    try{ 
     $.getJSON("data/source", function(data) { 
      $.d = data; 
     }); 
    } 
    catch (ex){ 
     alert ('error in jQuery call:' + ex) 
    } 
} 
3

があるかどうかを確認するためにjQueryの呼び出しの周りにtryキャッチ。私はちょうど推測を取る!あなたはこの関数を呼び出し、その後、すぐに結果を得るための$ .Dをチェックしている場合、それはあなたが完了するために非同期 AJAX要求のための時間を許可していないので、仕事に行くのではありません

...

reload_data(); 
alert($.d); // What?! It's not displaying the updated results?! 
あなたはjQueryのはそれを動作させるために、使用していますように、コールバック構造を利用する必要があります

...

reload_data(function() { 
    alert($.d); 
}); 

function reload_data(func) { 
    $.getJSON("data/source", function(data) { 
    $.d = data; 
    //Execute the callback, now that this functions job is done 
    if(func) 
     func(); 
    }); 
} 
+0

ええ、それは私の推測でした。だから私は彼が機能が呼ばれていないと確信していたかどうか尋ねた。結局のところ、Ajaxは非同期です。 – Nosredna

+0

それは興味深い点をもたらします。私は彼が彼の要求を同期することができると思うし、それは問題を解決するかもしれないが、私はそれが最良の解決だとは思わないので、私は私の答えをそのまま残す。 –

+0

いずれにせよ、彼は変数で何かをする前に、アヤックスが実行されるのを待たなければなりません。私は、呼び出しが非同期のままであれば、ブラウザのUIがより応答性が高いと思う(しかし、わからない)と思う。 – Nosredna

0

ヘルプみんなのおかげで、しかし、解決策は、実際には本当に簡単でした。それは単なる同期の問題でした。 JSONデータがリロードされる前にページがリロードされていたので、エラーが表示されませんでした。

関連する問題