けっこう深刻。
だって動かないんだからw
ホントかよーって思ったけど、確かに2回目以降はサーバサイドにリクエストは投げず、ブラウザがキャッシュしてるレスポンスデータで処理されてた。
なんてこったい!
とりあえず引用サイトでサンプルコード載せてくれてるので、ほぼそのまま実装しとけば $.ajax({type:'POST'}) や $.post() によるキャッシュ回避が可能。
タイムスタンプ付けて違うリクエストとして処理させる騙し技で十分な場合のみね。
ただ、jQueryMobile の section 動作においては GET, POST いずれでもなく、originalOptions に type プロパティが存在しないので、 jQueryMobile を導入したサイトでは上記サイトのサンプルコードそのままではエラーが起こってしまう。
なので、undefined チェックを追加しておく。以下。
だって動かないんだからw
ホントかよーって思ったけど、確かに2回目以降はサーバサイドにリクエストは投げず、ブラウザがキャッシュしてるレスポンスデータで処理されてた。
なんてこったい!
とりあえず引用サイトでサンプルコード載せてくれてるので、ほぼそのまま実装しとけば $.ajax({type:'POST'}) や $.post() によるキャッシュ回避が可能。
タイムスタンプ付けて違うリクエストとして処理させる騙し技で十分な場合のみね。
iOS6 Mobile SafariがAjax POSTでキャッシュする問題を回避する方法 | クラスメソッド開発ブログ
http://dev.classmethod.jp/smartphone/ios6-safari-post-jquery/
ただ、jQueryMobile の section 動作においては GET, POST いずれでもなく、originalOptions に type プロパティが存在しないので、 jQueryMobile を導入したサイトでは上記サイトのサンプルコードそのままではエラーが起こってしまう。
なので、undefined チェックを追加しておく。以下。
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {+ if(originalOptions.type == undefined) {+ return;+ }if(originalOptions.type.toLowerCase() == 'post'){options.data = jQuery.param($.extend(originalOptions.data||{}, {timeStamp: new Date().getTime()}));}});