2012-03-29 39 views
4

我在我的移動應用程序中使用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。

+1

檢查你是否在xhttpr參數(我相信第一個arg)的'complete'回調中找到任何東西,特別是尋找'xhttpr.responseText'它有什麼? – dennmat 2012-03-29 14:01:56

+0

responseText返回爲「」 – bmurmistro 2012-03-29 14:22:46

+0

我不確定這裏有多少依賴於緩存,但如果請求的內容不是太密集,你總是可以添加'cache:false'選項(只需粘貼垃圾郵件在請求url的末尾)。另外,我不確定ifmodified選項的功能如何:http://api.jquery.com/jQuery.ajax/可能只是將其刪除或將其設置爲false將解決問題。乾杯。 – dennmat 2012-03-30 14:39:27

回答

0

默認情況下,始終發出請求,但瀏覽器可能會將結果從緩存中提供。要禁止使用緩存結果,請將緩存設置爲false。如果資產自上次請求後未被修改,則導致請求報告失敗,請將ifModified設置爲true。