0

こんにちはみんな私は次のコードを持っています

$.ajax({
url: "http://localhost/twee/chat/getnumcom",
type: 'POST',
data: form_data,
success: function(html) {
            var data = parseInt(html);
                page = 20 * data ;

                while ( counter < page ) {

                       $.get("http://localhost/twee/chat/"+id+"/"+counter,function(data){
                       $('#c').append($(data).find('#c').html());
                       });      
                  counter = counter + 20 ;
               } 
          }
});

alert($('#600').length);
$.scrollTo('#600');

これはそれがすることです。もともとは、#600が見つかるまでウィンドウにデータを追加します。技術的には、600がどこにあるべきかを数学的に計算する関数があります。これは問題なく、divが適切にロードされます。

ただし、divがロードされているかどうかを確認するためにアラートを追加しました。値0はいいえを意味し、値1ははいを意味します。私のfirebugコンソールでは、関数が起動されたとき、whileループはまだ実行されていますが、アラートにはすでに値0が表示されています。その結果、スクロールは実行されません。

実行直後に関数を再起動すると、divがロードされたことを意味する1が表示されます。

whileループが実行されるまでスクロール機能を遅らせる方法はありますか?コードは手続き的に実行され、すべてのデータが読み込まれた後にアラートが表示されるといつも思っていました。

タイマーはオプションだと思いますが、使いたくありません。タイマーをどのミリ秒に設定すればよいのかよくわかりません。

4

1 に答える 1

1

Ajax呼び出しは非同期です。ループの後、 scrollTo/をコールバック関数alert内に配置します。successwhile

$.ajax({
    url: "http://localhost/twee/chat/getnumcom",
    type: 'POST',
    data: form_data,
    success: function (html) {
        var data = parseInt(html);
        page = 20 * data;

        while (counter < page) {
            $.get("http://localhost/twee/chat/" + id + "/" + counter, function (data) {
                $('#c').append($(data).find('#c').html());
                if ($('#600').length)   //if there's a #600 element inside this $.get callback
                    $.scrollTo('#600'); //scrolls to it
            });
            counter = counter + 20;
        }
    }
});

数値IDは、懸念がある場合はHTML5でのみ有効であることに注意してください。

于 2012-06-12T19:41:54.710 に答える