0

私が働いているクライアントは、ページをリロードする必要がないようにしようとしています。代わりに、彼は AJAX を使いたいだけです。今、私がやっている方法はあまり効率的な方法ではないことに気付きましたが、それが最も簡単で、彼のサイトを見れば理由がわかるでしょう..

AJAXがページの一部のみまたはページ全体を更新するように動作させようとしています。

私のコードは次のとおりです。

<!doctype html>
<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
        <script>
            function refresh (update) {
                $.get(location.href, function (data) {
                    console.log(data);
                    var EL = $(data).find(update);
                    var HTML = $('<div>').append(EL.clone()).html()
                    alert(HTML);
                    $(update).replaceWith(HTML);
                });
            }
        </script>
    </head>
    <body>
        <div style="font-size: 64px;">The current timestamp is <b class="time"><?php echo rand(999, 9999999); ?></b></div>
        <br><br>
        <button onclick="refresh('.time')">Refresh Time</button>
    </body>
</html>

ページを最初にロードすると、PHP は乱数を生成します。更新ボタンを押すと、この番号が更新されると想定されています。ただし、同じ数がそこにとどまります。リクエストは、新しい番号のページを返すのではなく、まったく同じページを返します。

繰り返しになりますが、これはあまり効率的な方法ではないことはわかっていますが、それを機能させようとしている方法です。

私は何か間違ったことをしていますか?(実際に一部のみを使用する場合にページ全体をリクエストする以外に)

編集

ここで試すことができます: http://methods.x10.mx/projects/refreshPageParts.php

4

2 に答える 2

2

呼び出しを次のように変更して、キャッシュを中断します。

function refresh (update) {
    $.ajax({
        type: "get",
        cache: false,
        url: location.href,
        success: function (data) {
            $(update).replaceWith($(data).find(update));
        }
    });
}

ドキュメントのキャッシュに関する注意事項を参照してください: http://api.jquery.com/jQuery.ajax/

デフォルトでは、リクエストは常に発行されますが、ブラウザはキャッシュから結果を提供する場合があります。キャッシュされた結果の使用を禁止するには、キャッシュを false に設定します。最後のリクエスト以降にアセットが変更されていない場合にリクエストが失敗を報告するようにするには、ifModified を true に設定します。

于 2013-09-18T22:28:36.473 に答える
-1

あなたの例をローカルの wamp スタックでテストしましたが、問題なく動作しています!

ところで:次の行の後にセミコロンを忘れました(必須ではありません)

var HTML = $('<div>').append(EL.clone()).html();

編集:あなたのコードは機能しています...あなたが提供したURLでも。奇妙なことに、機能するまでに数分待たなければなりません。したがって、ページにアクセスしてボタンを押しても、時間は更新されません...ただし、数分待つと... 1 回だけ、もう一度待つ必要があります。サーバーがページをキャッシュしていると思います。あなたの問題はサーバー側です...キャッシュを無効にすると動作します!!

編集:次のようなダミーパラメーターを使用して、取得URLを動的にすることもできます

http://methods.x10.mx/projects/refreshPageParts.php?v=dummy

ダミーを動的にする必要はないかもしれませんが、静的変数でも機能する可能性があります。気になるので教えてください(;_;)

于 2013-09-18T22:39:23.083 に答える