7
  • Code Igniter バージョン '2.0.3'
  • Jクエリ1.7
  • Jquery 履歴プラグイン

私は ajax 方式で構築した CodeIgniter アプリを持っています。次のような機能があります。

$(document).on('click','.ajax_link',function(e){
    //Stop the normal href action
    e.preventDefault();

    //Grab the destination URL
    var new_url = $(this).attr('href')
    
    //Grab the content via ajax and pass it to the history change function
    $.get(base_url+new_url,function(data){
        History.pushState({
            content:data.content,
            url:data.url
        }, data.title, data.url);
        //Refresh some site variables
        refresh();
    },'json');
});

ajax_link のクラスでアンカー要素のクリックをキャプチャし、その応答データのページへの配置を処理する関数に応答を送信します。

これは Chrome と FF で機能します。リンクをクリックすると、jQuery が get 要求を行い、JSON オブジェクトを取得し、history.pushState() 関数が json データの一部をページに挿入します。

私が抱えている問題はIE8にあります。基本的に、アプリを最初に開いたときにリンクが機能しますが、一度しか機能しません。2 回目にリンクをクリックすると、次のようになります。

  • ajaxかGET
  • 304 (Not Modified) の応答を受け取ります
  • コールバック関数を呼び出さないjQuery.get()ため、停止します。

キャッシュをクリアすると、再び機能します。したがって、IE が get 要求を行っていると想定していますが、過去にまったく同じファイルが既に要求されていることがわかり、プロセスが完全に停止します。

誰もこれに対する解決策を知っていますか? 304 エラーと ajax および IE のキャッシュに関するエラーについての言及を探しましたが、私のものと同じ問題はまだ見つかりませんでした。

どんな助けでも大歓迎です

(Windows 仮想マシン IE8、および Internet Explorer 9 の IE 8 モードでテスト済み)

解決済み

次のコードを document.ready 関数に追加するだけで、問題はなくなりました。

$.ajaxSetup ({cache: false});
4

2 に答える 2

5

この行を変更します。

var new_url = $(this).attr('href')

これに:

var new_url = $(this).attr('href') + '?' + Math.random();

これは「CacheBuster」と呼ばれ、次のような URL を効果的に作成します。

"website.com/page.html?1241233"

その乱数は「.ajax_link」をクリックするたびに異なるため、IE はそれを新しいページと見なして適切に取得します。

于 2012-01-18T00:40:59.030 に答える
0

IE (および Opera) が "application/json" を好まないという問題がありました。応答を "text/plain" としてレンダリングする必要があります。

于 2012-01-17T23:41:00.283 に答える