ExtJS захватить JSON результат - PullRequest
17 голосов
/ 03 июня 2009

Я генерирую ответ JSON от PHP, ведьма выглядит так:

{ 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 ]

35 голосов
/ 03 июня 2009

Простой подход:

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):

var text = messages.map(function(msg){
  return msg.title;
}).join(", ");
alert(text);
6 голосов
/ 03 июня 2009

Используйте свойства success и fail :

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 голосов
/ 12 июня 2012

проверьте этот образец скрипта, который предназначен для 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()

1 голос
/ 03 июня 2009

если вы уверены, что ваш ввод верен (остерегайтесь xss-атак), вы можете использовать функцию eval () для создания вашего javascript-объекта из результата json, к которому затем можно получить доступ через вашу команду:

var mymessages = jsonData.options;

Но опять же, Ext делает это хорошо для вас, как Рене указал через функцию Ext.decode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...