3

Ajax リクエストが 2 秒ごとに行われる単純なスクリプトがあります。「ext」と呼ばれる php ページから取得したデータが最後に取得したデータと異なる場合、コードは関数を実行します。これを行うために、ajax リクエストで ifModified:true 設定を使用しますが、機能しません。

これは私が使用しているコードです

$(document).ready(function(){

setInterval(repeat,2000);

function repeat(){
$.ajax({
  type: "GET",
  url: "ext.php",
  ifModified: true,
  success:function(data) {
$('.photo').fadeOut(5000).delay(1000).css('background-image', 'url(' + data + ')' ).fadeIn(5000);
}
});
}

});

これは「ext.php」にあるコードです。その目的は、最後に追加された jpg へのパスをディレクトリに単純に出力することです。

<?php
$array = glob("images/{*.jpg,*.JPG}", GLOB_BRACE);
$ultimo = end($array);
?>
<?php echo $ultimo; ?>

現時点では、スクリプトはパスが ext.php にある画像を、fadeOut と fadeIn を持つクラス ".photo" の div の背景として設定します。私の考えでは、パスが以前に使用されたものと同じ場合、画像はフェードアウトとフェードインを繰り返さず、新しいパスが提供されるまで静止したままにする必要があります。

私は何が欠けていますか?

4

1 に答える 1

6

Ajax リクエストが正常に完了すると、「success」コールバックが 2 つの引数で呼び出されます。受信したデータと値「success」のステータス文字列です。(3番目の引数はこの問題には関係ないので省略しました)

プロパティ「ifModified」を Ajax リクエストに設定すると、同じ URL の 2 番目のリクエストで、成功コールバックが 2 つの引数で呼び出されます。未定義の値と、値が「nonmodified」のステータス文字列です。(3番目の引数はこの問題には関係ないので省略しました)

実際には、成功のコールバックでは、「ステータス」値 (2 番目の引数) を確認する必要があります。「成功」の場合は続行し、「変更されていない」場合は何もしません。

success: function(data, status) {
    if (status === "success") {
        // New data received, do what you want
    } else {
        // Old data received, ignore or similar
    }
}
于 2013-10-30T16:42:10.937 に答える