2

私が考えていたことについて、AJAXについて明確にしたい...

AJAXは非同期と言われています-必要に応じて-ページの読み込み中にjavascriptが実行され、AJAX呼び出しが実行された場合、サーバーがAJAXリクエストを処理している間、ページは引き続き読み込まれます...疑似並列処理に例えることができると仮定しても安全ですか?

では、結果として AJAX 呼び出しを行う 2 つの異なる JavaScript についてはどうでしょうか。つまり、ページの読み込み中に、2 つの js 関数が次々に発生し、それぞれが AJAX 呼び出しを行っています。それらは異なるjs関数/または2つの異なるjsファイルであるため、先に進む前に関数が戻るのを待つ必要がありますか? その通りだと思います...

そして最後に私が持っている本当の質問...私が呼び出したjs関数があり、その関数で2つのAJAX呼び出しを配置し​​た場合、それらは半同時に処理されますか...私のWebページで偶然何かを試していたからです私は 2 つの AJAX 呼び出しを次々に配置しましたが、それが予期しない結果が得られた理由だと思います。残念ながら納期が急いでいたので追及はしませんでしたが、場合によってはとても便利なので、そういう世界なのかな…と思っていました。

このようなもの

function finalizeReservation(){
    var request = $.ajax({
        type:       'POST',
        url:        './scripts/php/reserve.php',
        data:       { 
                },
        dataType:   "json"
    });

    request.done(function(data,textStatus,jqXHR) {

    });

    request.fail(function(jqXHR, textStatus, errorThrown) {
    });

    var request2 = $.ajax({
        type:       'POST',
        url:        './scripts/php/reserve.php',
        data:       { 

                },
        dataType:   "json"
    });

    request2.done(function(data,textStatus,jqXHR) {

    });

    request2.fail(function(jqXHR, textStatus, errorThrown) {
    });

}

ただ好奇心旺盛。

予約を記録するWebページがあるので、それを考えていました。ゲストは詳細を見て、それについて考えることができますが、予約を確定する前に。その期間、データベースのスロットは保留に設定され、別のゲストが使用できなくなるため、競合したり、競合状態に陥ったりすることはありません (つまり、それについて考えている間、他のゲストがそれをファイナライズし、自分でそれをファイナライズしようとすると、彼はできません)。またはコードで不注意だった場合もそれをファイナライズします)。問題はゲストの動作にありますが、更新、バックページ、終了タブ、ウィンドウを閉じるなどのすべてのイベントをキャプチャしようとしたため、ゲストが何らかの理由で閉じない場合、スロットは保留状態のままになりませんすべてのブラウザーですべてがキャプチャされるわけではありません (キャンセル)。だから私はサーバーに時間制限を設けることについて考えました. . 問題は、ホスティングサーバーが chron ジョブをサポートしていないことですが、私はそれらについてあまり知りません。そのため、どれだけ役立つかわかりません。また、mysql はスケジューラーをサポートしていません。そこで、2 つの ajax 呼び出しを行うことと、1 つをタイマーにして、時間が経過した後にスロットの状態をチェックし、それに応じて動作することを考えました。それらについてあまり知らないので、それらがどれほど役立つかわかりません.mysqlはスケジューラをサポートしていません. そこで、2 つの ajax 呼び出しを行うことと、1 つをタイマーにして、時間が経過した後にスロットの状態をチェックし、それに応じて動作することを考えました。それらについてあまり知らないので、それらがどれほど役立つかわかりません.mysqlはスケジューラをサポートしていません. そこで、2 つの ajax 呼び出しを行うことと、1 つをタイマーにして、時間が経過した後にスロットの状態をチェックし、それに応じて動作することを考えました。

どんな考えでも大歓迎です。長い投稿で申し訳ありません。

4

2 に答える 2

0

次のコードがajax関数の中にない限り、ajax関数の後のコードの実行は、ajax関数が完了するのを待たずに続行されcallbackます。

于 2012-09-21T15:41:59.117 に答える
0

Ajax について具体的な質問はありませんが、Ajax についてかなりよく理解しているようで、あなたの言ったことはすべて正しいです。少なくとも jQuery では、デフォルトで非同期であり、使用しない限りDeferred、ajax 呼び出しの後に実行されるコードが ajax 呼び出しの前に完了しないという保証はありません。

あなたの実際の質問は、予約の古いロックを処理する方法についてのようです。いくつかの提案:

  • 別の共有ホストに移動します。cron ジョブを許可する共有ホストに年間 15 ドルを支払っています。
  • 誰かがページにアクセスするたびに、ロックされたすべての予約を確認し、それらが十分に古い場合は、ロックが古くなっていると想定します。

別の ajax 呼び出しは役に立ちません。ページを閉じたらどうなりますか? onbeforeunloadを使用して、ロックを解除するダイアログを警告することもできますが、これは非常に煩わしいものです。

于 2012-09-21T15:37:41.163 に答える