1

我正在使用 Spring MVC 和 extjs 4 中的视图开发应用程序。此时,我必须创建一个显示用户列表的 Grid。

在我的 Spring MVC 控制器中,我有一个 Get 方法,它以 json 格式返回用户列表,其中“items”作为根。

 @RequestMapping(method=RequestMethod.GET, value="/getUsers")
 public @ResponseBody Users getUsersInJSON(){
     Users users = new Users();
     users.setItems(userService.getUsers());
     return users;
 }

如果我尝试使用浏览器访问它,我可以正确看到 jsondata。

{"items":[{"username":"name1",".....

但我的问题与 Ext.data.Store 的请求有关

我的脚本如下:

Ext.onReady(function(){

    Ext.define('UsersList', {
        extend: 'Ext.data.Model',
        fields: [
            {name:'username', type:'string'},
            {name:'firstname', type:'string'}
        ]
    });

    var store = Ext.create('Ext.data.Store', {
        storeId: 'users',
        model: 'UsersList',
        autoLoad: 'true',
        proxy: {
            type: 'ajax',
            url : 'http://localhost:8080/MyApp/getUsers.html',
            reader: {type: 'json', root: 'items'}
        }
    });



    Ext.create('Ext.grid.Panel',{
        store :store,
        id : 'user',
        title: 'Users',
        columns : [ 
            {header : 'Username',  dataIndex : 'username'}, 
            {header : 'Firstname', dataIndex: 'firstname'}
        ],
        height :300,
        width: 400,
        renderTo:'center'
    });
});

当商店尝试检索数据并启动 http 请求时,在我的萤火虫控制台中出现 OPTIONS getUsers.html 而浏览器中的请求启动 GET getUsers.html

因此,Ext.data.Store 没有元素,并且网格显示为带有列名但没有数据。也许我错过了什么

谢谢

4

1 回答 1

3

您可以使用actionMethods.

但是,正如您在文档中看到的(显然应该如此),GET 是读取操作的默认设置。因此,您正在观察的 OPTIONS 请求非常令人费解。您确定没有覆盖默认应用程序范围的代码的另一部分吗?也许在您项目的所有 JS 文件中搜索“OPTIONS”,以尝试找到可能的嫌疑人。显然整个 Ext 代码中没有匹配项,所以这可能不是来自框架。

编辑:

好的,我想我明白了。如果您的页面不是从同一个域访问的(即 localhost:8080,端口被考虑在内),XHR 对象似乎求助于一个 OPTIONS 请求。

因此,要解决您的问题,请完全省略域名,使用:

url: '/MyApp/getUsers.html'

或者仔细检查您是否使用相同的域和端口来访问页面并发出请求。

于 2013-06-06T09:45:28.503 回答