在 extJs 中将字符串返回为 json

Returning string as json in extJs

我正在研究 extJs 3。2.x

我有一个简单的函数,它 returns 一个字符串。

public Object getRevenueCurrency(....) {
    return "USD";
} 

我有 Jackson 映射器将响应类型映射到 JSON。

<bean name="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
        <property name="contentType">
            <!-- <value>application/json</value> -->
            <value>text/html</value>
        </property>
    </bean> 

检索数据的尝试如下:

currencyStore = new Ext.data.JsonStore({
id:'currencystore',
url: 'xxxxxxx?action=getcurrency',
root: 'string',         
listeners: {load: function(store) {
       rev_currency=store.?????;
    }
}
});
currencyStore.on('exception',function( store, records, options ){
alert('Exception was called');
},this);

Fiddler 将来自服务器的响应显示为:

{"string": "USD"}

虽然我没有得到服务器或js异常,但调用了异常警报。

1.How 我要提取货币价值吗?
2.What 是一种在上面的异常处理程序中提取有关异常的有意义信息的方法吗?

您已通过设置根 属性 配置商店,这意味着商店的 reader 需要 json 匹配 'string'.[=11 的根节点=]

所以 reader 实际上期待以下形式的响应。

{"string":[{"propertyname":"USD"}]}

相反,您可以只删除商店配置中的根 属性,因为返回的只是一个平面对象

我注意到您没有在您的商店中配置任何字段,所以当 reader 接受您的 json 响应时,它试图找到一个名为 'string' 的字段来绑定。

查看 JsonStore 的 ExtJS3 文档 -> http://docs.sencha.com/extjs/3.4.0/#!/api/Ext.data.JsonStore

示例配置向您展示了字段的定义方式,因此您的商店应如下所示:

currencyStore = new Ext.data.JsonStore({
id:'currencystore',
url: 'xxxxxxx?action=getcurrency',
fields: ['string'],         
listeners: {load: function(store, records, options) {
       rev_currency=store.?????;
    }
}
});

请注意,我还将参数更改为您的加载函数处理程序,因此可以使用 records[0]

访问从您的 json 创建的新记录

关于你的第二个问题:

2.What is a way to extract a meaningful information on the exception in the exception handler above?

根据docs for the exception event签名和参数是:

exception( store, type, action, options, response, arg )

通过检查参数(例如 console.log(...)),您应该可以检索到一些有用的信息。