-1

jQuery、AJAX、PHP、mySQLを使用して、オークションと同様の機能を開発しています。

Ajaxは毎秒サーバーにアクセスして最新の入札を取得します。この通話中に、サーバーから残りの時間を取得して、すべての参加者の同期を維持します。

私には2つの問題があります:

1)時折、残り時間がちらつき、ほんの一瞬で前の時間の値に戻ります。これは、非同期の結果が同期しなくなったことと関係がありますか?

関連するコードのスニペット:

function dotimer() {
    updateScreen();
    setTimeout('dotimer()',1000);
}

function updateScreen(){
    $.ajax({
        type : 'POST',
        url : 'getinfo.php',
        dataType : 'json',
        data: { /* various params are passed to php */ },
        success : function(data){
            /* other info processed here...*/
            $("#countdowntimer").html(data.secondsremaining);           
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {}
    });
}

getinfo.php:

$return['secondsremaining'] = strtotime($end_time)-strtotime("now");
/* get other infor from database... */
echo json_encode($return);

(setTimeoutとsetIntervalはどちらも同じ結果になりました。)

2)毎秒データベースにアクセスするのは過剰ですか?情報が最新であることを確認するための代替手段がわかりません。これを行うためのより良い方法はありますか?オークションは比較的短時間(30分)で行われ、10名を超える参加者は見込まれません。

どんなアドバイス/提案も歓迎します、ありがとう!

4

1 に答える 1

1

それがまさにあなたの問題だと思います。リクエストは非同期であるため、実行される順序を制御することはできません。リクエストを同期し、複数のリクエストを回避する必要があります。つまり、保留中のリクエストがない場合にのみ新しいリクエストを実行できます。そうしないと、各リクエストのコールバックがいつ発生するかを制御できません。

于 2012-05-14T15:23:05.843 に答える