Javascript ExtJS抓取JSON结果

Javascript ExtJS抓取JSON结果,javascript,php,json,extjs,Javascript,Php,Json,Extjs,我正在从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"} }); 我接下来要写什么才能得

我正在从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应该包含示例消息,这是第二个示例消息


谢谢。

简单的方法:

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以更极端的方式进行:

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未提供该功能),但:

使用成功和失败属性:

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
    }
});

有关更多详细信息,请参阅文档

如果您确定输入正确(注意xss攻击),您可以使用eval()函数从json结果生成javascript对象,然后可以通过命令访问:

var mymessages = jsonData.options;

但是,正如Rene通过Ext.decode函数指出的那样,Ext也能很好地为您做到这一点。请检查ExtJS4的提琴示例


ext4向前使用
Ext.JSON.encode()
Ext.JSON.decode()
;虽然ext3使用
Ext.util.JSON.encode()
Ext.util.JSON.decode()

,但我需要访问选项“category”中的所有消息。我可以做一个jsonData.done,我得到了“1”作为一个响应,这很好,但我如何获取所有的“消息”文本?谢谢,效果很好!还有一件事,如果可以的话:我如何收集所有消息并在Ext.Msg.alert中显示它们?我在Firebug的Array.map示例中得到一个“messages.map不是函数”错误。有什么我遗漏的吗?谢谢,很抱歉弄得一团糟,但我是一个初学者。正如我所说,map()不是由Ext提供的。但是你可以使用一些定义它的库,比如Ext basex:Late,question,拜托!现在是否有机会从JSON中获取“done”的值?我是说在同一家商店里。基本上,我需要知道是(done==“1”)还是done==“0”。谢谢
var mymessages = jsonData.options;