2011-03-15 45 views
1

我有一個數據存儲,從我的服務器上的JSON api獲取信息。當我在WebKit/Chrome中運行代碼時,一切似乎都正常,但如果我將用戶代理更改爲iPhone 4.1等,則表明JSON請求未正確設置。與其發送獲取JSON的請求,它只是發送請求並獲取HTML呈現的頁面。在SenchaTouch中爲Ext.data.Store代理設置請求標頭

這是我所定義的存儲:

Product.ProductStore = new Ext.data.Store({ 
    model: 'Product', 
    proxy: { 
     type: 'ajax', 
     url: '/admin/products.json', 
     reader: { 
      type: 'json', 
      root: 'products' 
     } 
    }, 
    autoLoad: true, 
    storeId: 'productStore', 
    getGroupString: function(record){ 
     return record.get('vendor')[0]; 
    } 
}); 

所以,我真的希望有這家店做的是發送到/admin/products.json的請求,在桌面上按預期其中工程。但是,當我在我的模擬器或甚至在設備上運行它時,它似乎只是將請求發送到/ admin/products,而不是返回HTML。

有人提出這是一個rails服務器問題,我需要爲我的請求設置內容類型。問題是我該如何做到這一點?

我試過以下,它似乎並沒有工作,要麼:

Product.ProductStore = new Ext.data.Store({ 
    model: 'Product', 
    proxy: { 
     type: 'ajax', 
     url: '/admin/products.json', 
      // Trying to set the headers for the request -- not working 
     headers: { 
      'Content-Type': 'application/json' 
     }, 
     reader: { 
      type: 'json', 
      root: 'products' 
     } 
    }, 
    autoLoad: true, 
    storeId: 'productStore', 
    getGroupString: function(record){ 
     return record.get('vendor')[0]; 
    } 
}); 

難道我只需更換用我自己的AJAX請求已設定正確的內容類型標頭?如果是這樣,是否有一些使用商店和它自己的自定義AJAX請求的例子?

回答

3

應該

'Accept' : 'application/json' 

接受的是客戶端用來告訴它喜歡什麼媒體類型的服務器頭。 Content-Type是服務器發送的標題,作爲響應的一部分,告訴客戶端數據是什麼。

+0

這似乎沒有工作,我試着在我的代理對象中設置defaultHeaders和標題,但它仍然沒有正確設置請求標題。 – csaunders 2011-03-15 15:55:43

+0

您是否用接受替換了Content-Type?你的回覆不清楚。在Chrome中運行它時,請使用開發人員工具檢查請求中的標題。 – 2011-03-15 18:03:17

+0

原來,這是一個服務器端的UA檢測錯誤,總是將任何請求重定向到/ admin/products。對於含糊不清的道歉,我的意思是我的確嘗試了你的建議。感謝您的幫助:) – csaunders 2011-03-15 19:03:42