2

私の Web サイトでは、すべてのページが html と json を返すことができます。リクエストが通常の場合、ページは html を返し、リクエストが AJAX の場合、ページは json を返します。

問題は、json 応答が必要なときに、Firefox が html 応答をキャッシュすることです。どちらの場合も、キャッシュなしオプションを含む応答ヘッダー

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  Keep-Alive
Date    Sat, 13 Apr 2013 08:31:06 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=5, max=100
Pragma  no-cache

これは私がAJAXリクエストを行う方法です:

$.ajax({
    url: window.location.href,
    dataType: 'json',
    //cache: false,
    success: function(data) {
        // here I get html, (must be json)
        // If I set "cache: false" then all is ok
    }
});

この問題は Firefox にあります。クロムではすべて問題ありません

今いるページでリクエストを送っているからだと思います。たとえば、 window.location.href で url を変更した場合。'?a=1' で、既に window.location.href ページにいる場合。'?a=1' AJAX は、必要な方法で json を返します。

4

2 に答える 2

1

ajaxリクエストの処理を担当しているファイルにキャッシュ制御をキャッシュなしに設定できます

 header('Cache-Control: no-cache, must-revalidate');

またはこれを試してください:

if($_SERVER['HTTP_ORIGIN'] == "http://example.com")
{

    header('Access-Control-Allow-Origin: http://example.com');
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/json'); 
    //your code here

}else{    
   header('Content-Type: text/html');
   echo "<html>";
   echo "<head>";
   echo "   <title>Another Resource</title>";
   echo "</head>";
   echo "<body>",
   "</body>",
   "</html>";
}
于 2013-04-13T08:42:47.793 に答える
1

JSON と HTML が異なる URL を使用してアクセスされるように、URL スキームを変更してみませんか? 例えば

/foo.html 対 /foo.json

また

/foo?format=html vs. /foo?format=json

これを Firefox の回避策と考えないでください。キャッシュ可能性の高いサイトはユーザーにとってより高速に実行され、サイトにサービスを提供するために必要なリソースの量が削減されるため、キャッシュ可能性をできるだけ低下させないようにする必要があります。

于 2013-04-13T08:59:49.347 に答える