ExtJS захватить результат JSON
Я генерирую ответ 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;
И мои сообщения должны содержать примерное сообщение, и это сообщение второго примера.
Спасибо.
Ответы
Ответ 1
Прямой подход:
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);
}
}
});
Или вы можете сделать это более Ext-ish способом, используя 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);
Ответ 2
Используйте свойства успеха и отказа:
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
Ответ 3
проверьте этот пример скрипта, который для 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()
Ответ 4
если вы уверены, что ваш ввод верен (остерегайтесь xss-атак), вы можете использовать функцию eval(), чтобы сделать ваш javascript-объект из вашего json-результата, к которому затем можно получить доступ через вашу команду:
var mymessages = jsonData.options;
Но опять же Ext делает это хорошо для вас, так как Рене указал через функцию Ext.decode