在extJs中将字符串作为json返回

时间:2015-02-03 16:33:50

标签: extjs extjs4 extjs3

我正在研究extJs 3.2.x

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

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

我有Jackson mapper将响应类型映射到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.我如何提取货币值?
2.在上面的异常处理程序中提取有关异常的有意义信息的方法是什么?

3 个答案:

答案 0 :(得分:1)

关于你的第二个问题:

  

2.在上面的异常处理程序中提取有关异常的有意义信息的方法是什么?

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

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

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

答案 1 :(得分:0)

您已通过设置root属性配置了商店,这意味着商店的读者希望json中的根节点匹配&#39;字符串&#39;。

所以读者实际上期待以下形式的回应。

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

相反,您可以在商店配置中取出root属性,因为返回的所有内容都是平面对象

答案 2 :(得分:0)

我注意到你的商店里没有配置任何字段,所以当读者拿走你的json respsonse时,它试图找到一个名为&#39; string&#39;绑定到。

查看JsonStore的ExtJS3文档 - &gt; 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.?????;
    }
}
});

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

访问从json创建的新记录