Extjs 4 - 以json格式检索数据并加载Store。它发送OPTION请求

时间:2013-06-06 09:01:55

标签: spring-mvc extjs extjs4

我正在使用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请求时,在我的firebug控制台中出现OPTIONS getUsers.html,而浏览器中的请求启动GET getUsers.html

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

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用actionMethods更改代理用于不同CRUD操作的HTTP方法。

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

编辑:

好的,我想我已经知道了。如果不从同一域访问您的页面(即localhost:8080,考虑端口),则XHR对象似乎采用OPTIONS请求。

因此,要解决您的问题,请使用以下方法完全省略域名

url: '/MyApp/getUsers.html'

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