我正在从PHP女巫生成JSON响应,如下所示:
{ done:'1', options: [{ message:'Example message'},{message:'This is the 2nd example message'}]}
我想使用ExtJS获取这些结果。这就是我到目前为止所做的:
Ext.Ajax.request({
loadMask: true,
url: 'myfile.php',
params: {id: "1"}
});
接下来要写什么才能得到像这样的json结果:
var mymessages = jsonData.options;
mymessages应该包含Example消息,这是第二个示例消息。
谢谢。
答案 0 :(得分:35)
直截了当的方法:
Ext.Ajax.request({
loadMask: true,
url: 'myfile.php',
params: {id: "1"},
success: function(resp) {
// resp is the XmlHttpRequest object
var options = Ext.decode(resp.responseText).options;
Ext.each(options, function(op) {
alert(op.message);
}
}
});
或者你可以使用Store:
以更多的Ext-ish方式完成var messages = new Ext.data.JsonStore({
url: 'myfile.php',
root: 'options',
fields: [
{name: 'text', mapping: 'message'}
],
listeners: {
load: messagesLoaded
}
});
messages.load({params: {id: "1"}});
// and when loaded, you can take advantage of
// all the possibilities provided by Store
function messagesLoaded(messages) {
messages.each(function(msg){
alert(msg.get("text"));
});
}
解决上一条评论的另一个例子:
var messages = [{title: "1"},{title: "2"},{title: "3"}];
var titles = msg;
Ext.each(messages, function(msg){
titles.push(msg.title);
});
alert(titles.join(", "));
虽然我更喜欢使用Array.map(Ext不提供):
var text = messages.map(function(msg){
return msg.title;
}).join(", ");
alert(text);
答案 1 :(得分:6)
使用成功和失败属性:
Ext.Ajax.request({
loadMask: true,
url: 'myfile.php',
params: {id: "1"},
success: function(response, callOptions) {
// Use the response
},
failure: function(response, callOptions) {
// Use the response
}
});
有关详细信息,请参阅Ext API文档
答案 2 :(得分:2)
检查这个适用于Ext JS 4的示例小提琴。http://jsfiddle.net/mrigess/e3StR/
Ext 4向前使用Ext.JSON.encode()
和Ext.JSON.decode()
; Ext 3使用Ext.util.JSON.encode()
和Ext.util.JSON.decode()
答案 3 :(得分:1)
如果你确定你的输入是正确的(谨防xss攻击)你可以使用eval()函数从你的json结果中创建你的javascript对象,然后可以通过你的命令访问它:
var mymessages = jsonData.options;
但是再一次,Ext为你做得很好,正如Rene通过Ext.decode函数指出的那样