17

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

谢谢你。

4

4 回答 4

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);
于 2009-06-03T13:56:47.660 回答
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文档

于 2009-06-03T13:56:53.557 回答
2

检查这个适用于 Ext JS 4 的示例小提琴。http://jsfiddle.net/mrigess/e3StR/

分机 4 以后使用Ext.JSON.encode()Ext.JSON.decode();而 Ext 3 使用Ext.util.JSON.encode()Ext.util.JSON.decode()

于 2012-06-12T11:02:57.090 回答
1

如果您确定您的输入是正确的(谨防 xss 攻击),您可以使用 eval() 函数从您的 json 结果中创建您的 javascript 对象,然后可以通过您的命令访问该对象:

var mymessages = jsonData.options;

但是话又说回来,Ext 为您做得很好,正如 Rene 通过 Ext.decode 函数指出的那样

于 2009-06-03T14:15:54.923 回答