2012-05-23 11 views
5

Before Any Anything:$.getJSON back button showing JSON return data not the pageが役に立たなかっただけでなく、https://groups.google.com/group/angular/browse_thread/thread/3787ad609c0beb77/eb1b57069dab9f63もインターネットは役に立ちませんでした。ChromeのJSONブレークバックボタン、IEのリロードボタン(裸のデータとして表示)

私は、この同じページ内jqueryのテンプレートでレンダリングされるJSONデータを取得するために、ページ内からURLを呼んでいる:

は、ここで問題です。

この

$.ajax({ 
    url: '/searchthis', //important, this is NOT THE SAME URL 
    cache: false, 
    type: 'GET', 
    headers: { 
    "Accept": "application/json", 
    }, 
    dataType: 'json' 
    success: function(data) { 
    doSomethingWithResults(data); 
    } 
}); 

のようなラック応答はキャッシュなしに設定されたキャッシュ制御ヘッダあり、我々はページhttp://someurl.com/searchにしていると想像し、私たちは、要求を開始している:

Cache-Control:no-cache 

すべての作品をただし、クロールに別のページのページを残してから、戻るボタンを押すと、裸のJSONデータが表示されます。 IE8でリロードボタンを押したときと同じ動作があります。アドレスバーのURLでEnterキーを押すだけで、両方とも完璧に機能します。

クローム人はそれを行うことはありませんので、それはそれは本当にすべきものをキャッシュするので、私は、それはブラウザ側の誤解のように私には思える(http://code.google.com/p/chromium/issues/detail?id=108425を参照)、私はこの問題を解決できる方法

が届きません

答えて

6

問題は実際にはRailsでした:ChromeとIEの両方が特定の形式ではないため、最後のレスポンスを要求します。そのためRailsはリクエストしていません(つまり、レスポンスヘッダー)私の場合はjsonであった最初の応答ブロックを取るだけです。 jsonブロックの前にhtmlブロックを置くことで問題が解決されました。

respond_to do |format| 
    format.html { ... } //important because the request comes with no specific format 
    format.json { ... } 
end 
3

私はChromeで同じ問題がありました。

$.ajax({ 
    url: '/restful/path', 
    data: { format: 'js' }, // This line here 
    dataType: 'json' 
}); 

か:私のコントローラのメソッドはformat.html

respond_to do |format| 
    format.html 
    format.js 
end 

そうのように、Chromeは結果をキャッシュするので、私は私のAJAXリクエストへのデータエントリを追加することによってこの問題を解決することができたようだを持っていますリクエストの最後にそれを取り付けることによって、フォーマットを渡すことができ、ちょうどあなたがあなたのルートに

$.ajax({ 
    url: '/restful/path.js', 
    dataType: 'json' 
}); 

・ホープ、この彼を(.:format)オプションを持っていることを確認してくださいlps someone

+0

私は、エクスプレスアプリで同様の問題に遭遇していました。それは、データ値がトリックを行うので、空のオブジェクトでさえ渡しているようです。これを投稿していただきありがとうございます。 – kdetella

+0

確かに、データに書式を送信して修正しました。 '$ .getJSON(path、{format:" json "}、handler_func(response){// do something})'を使って 'json'を使いました。 – Glenn

関連する問題