带有id的Extjs store.load导致CORS错误

时间:2013-08-27 17:00:52

标签: javascript extjs servicestack extjs4.2

使用

加载使用树视图组件的商店时
store: 'somestore'

具有以下设置:

Ext.define('App.store.AdminNavigationTree', {
    extend: 'Ext.data.TreeStore',
    model: 'App.model.AdminNavigationTree',
    storeId: 'AdminNavigationTree',
    headers: { 'Content-Type': 'application/json' },
    proxy: {
        type: 'ajax',
        url: settings.ApiUrl + '/View/AdminNavigation/?format=json',
        reader: {
            type: 'json',
            root: 'result',
        }
    },
    folderSort: true
});

数据加载正常。

尝试使用以下商店调用store.load时,目的是填充表单,而不是!

Ext.define('App.store.PromotionCompany', {
    extend: 'Ext.data.Store',
    model: 'App.model.PromotionCompany',
    storeId: 'PromotionCompany',
    headers: { 'Content-Type': 'application/json' },
    proxy: {
        type: 'ajax',
        url: settings.ApiUrl + '/Model/PromotionCompany/?format=json',
        reader: {
            type: 'json',
            root: 'result',
        }
    }
});

我正在使用ServiceStack作为API,这两个网址都设置了[EnableCors],确实 - 当使用以下内容调用store.load时:

store.load({
    params: { id: pcid },
    callback: function (records, options, success) {
        //do something
    }
});

我可以看到请求进入API并返回正确的数据!

有没有人知道ExtJs在这里可能会做些什么?

1 个答案:

答案 0 :(得分:1)

根据我在上一次ExtJs + ServiceStack项目中的回忆,TreeStore和Store期望不同的数据结构。

  • 使用Chrome开发工具或Firebug检查响应对象,这可能是一个解析问题。至少,它会让你更接近解决方案。
  • 仔细检查你的JsonReader属性(在你的商店),我已经被抓了几次因为我忘了在它上面设置'root'属性

编辑1:我查找了我的代码,响应类似,唯一的区别是包含其他信息,如leaf:true等。我也没注意到你已经在代码示例中设置了root属性。