我在我的移動應用程序中使用jquery ajax通過restful apis獲取我的json數據。我的寧靜apis已被配置爲支持etags。我的寧靜apis託管在另一個子域,所以我配置了CORS來處理跨域調用。在我的開發環境中,我將移動應用程序配置爲在test.domain.com上運行,並將restful apis在test2.domain.com中運行,以便我可以測試跨域調用。所有這些都很棒!我Ajax調用的行爲完全按照我期望與ETag的:爲什麼jquery ajax調用在獲取304狀態碼時從緩存填充數據變量?
撥打電話獲得JSON內容:
$.ajax({
ifmodified: true,
....
success: function(data){
}
我得到一個狀態200和數據變量的成功回調有數據。 對同一資源進行另一次調用(不期待任何更改)我得到狀態304,並且成功回調中的數據變量具有數據(從緩存中加載)。
到目前爲止這麼好。
現在,如果我將我的開發環境配置爲將我的移動應用程序和寧靜的apis都放在同一個域中,那麼這裏是我遇到問題的地方。
$.ajax({
ifmodified: true,
....
success: function(data){
}
我得到狀態200,成功回調中的數據變量包含數據。 對同一個資源進行另一次調用(不期待任何更改)我得到狀態304,並且數據變量未定義!
任何想法爲什麼使用此配置jquery不會使用緩存中的內容填充數據變量?我也在我的ajax調用中刪除了CORS和crossdomain設置,但仍然沒有運氣。我使用的是jquery 1.7.1。
檢查你是否在xhttpr參數(我相信第一個arg)的'complete'回調中找到任何東西,特別是尋找'xhttpr.responseText'它有什麼? – dennmat 2012-03-29 14:01:56
responseText返回爲「」 – bmurmistro 2012-03-29 14:22:46
我不確定這裏有多少依賴於緩存,但如果請求的內容不是太密集,你總是可以添加'cache:false'選項(只需粘貼垃圾郵件在請求url的末尾)。另外,我不確定ifmodified選項的功能如何:http://api.jquery.com/jQuery.ajax/可能只是將其刪除或將其設置爲false將解決問題。乾杯。 – dennmat 2012-03-30 14:39:27