我正在使用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没有元素,网格显示列名但没有数据。也许我错过了什么
谢谢
答案 0 :(得分:3)
您可以使用actionMethods
更改代理用于不同CRUD操作的HTTP方法。
但是,正如您在doc中看到的那样(显然应该是这种情况),GET是读取操作的默认设置。所以您观察的OPTIONS请求非常令人费解。您确定代码的其他部分没有覆盖默认的应用程序范围吗?也许在你所有项目的JS文件中搜索'OPTIONS',试图找到可能的嫌疑人。显然,在整个Ext代码中没有匹配,所以这可能不是来自框架。
编辑:
好的,我想我已经知道了。如果不从同一域访问您的页面(即localhost:8080,考虑端口),则XHR对象似乎采用OPTIONS请求。
因此,要解决您的问题,请使用以下方法完全省略域名
url: '/MyApp/getUsers.html'
或仔细检查您是否使用相同的域和端口访问该页面并发出请求。