在SenchaTouch中为Ext.data.Store代理设置请求标头

时间:2011-03-15 15:01:25

标签: javascript mobile-safari iphone sencha-touch

我有一个数据存储,可以从我服务器上的JSON api获取它的信息。当我在WebKit / Chrome中运行代码时,一切似乎都运行正常,但如果我将用户代理更改为iPhone 4.1等,则看起来JSON请求未正确设置。不是发送获取JSON的请求,而是简单地发送请求并获取HTML呈现页面。

这是我定义的商店:

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请求?

1 个答案:

答案 0 :(得分:3)

应该是

'Accept' : 'application/json'

Accept是客户端用来告诉服务器它更喜欢哪种媒体类型的标头。 Content-Type是服务器作为响应的一部分发送的标头,告诉客户端数据是什么。