2009-06-03 7 views
17

sto generando risposta JSON da PHP strega si presenta così:ExtJS afferrare risultato JSON

{ done:'1', options: [{ message:'Example message'},{message:'This is the 2nd example message'}]} 

voglio afferrare questi risultati usando ExtJS. Questo è quello che ho finora:

Ext.Ajax.request({ 
    loadMask: true, 
    url: 'myfile.php', 
    params: {id: "1"} 
}); 

Cosa devo scrivere accanto per ottenere i risultati JSON come questo:

var mymessages = jsonData.options; 

E mymessages devono contenere un messaggio di esempio e questo è il messaggio secondo esempio .

Grazie.

risposta

35

L'approccio diretto:

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

Oppure si potrebbe farlo in un modo più Ext-ish utilizzando 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")); 
    }); 
} 

Un altro esempio per affrontare l'ultimo commento:

var messages = [{title: "1"},{title: "2"},{title: "3"}]; 

var titles = msg; 
Ext.each(messages, function(msg){ 
    titles.push(msg.title); 
}); 
alert(titles.join(", ")); 

Anche se preferirei farlo con un Array.map (che non è fornito da Ext):

var text = messages.map(function(msg){ 
    return msg.title; 
}).join(", "); 
alert(text); 
+0

Funziona ma ho bisogno di accedere a tutti i messaggi dalle opzioni "categoria". Posso fare un jsonData.done e ottengo "1" come risposta, la strega è buona, ma come potrei prendere tutti i messaggi "di messaggio"? –

+0

espanso il mio esempio per includere la visualizzazione di tutti i messaggi. –

+0

Grazie, funziona alla grande! Per altro, se posso, come posso raccogliere tutti i messaggi e mostrarli in Ext.Msg.alert? –

6

Utilizzare la successo e fallimento proprietà:

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

Vedi le Ext API documentazione per maggiori dettagli

+0

Questo codice manca una virgola dopo _params: {id: "1"} _ –

+0

Inoltre, l'ultima virgola, dopo la funzione di errore, causerà un errore in Internet Explorer. Altrimenti, un modello utile :) –

+0

Risolto, grazie – Kevin

1

se si è certi che il vostro ingresso sia corretta (attenzione di attacchi XSS) puoi usare la funzione eval() per rendere il tuo oggetto javascript dal tuo risultato json, a cui puoi accedere tramite il tuo comando:

var mymessages = jsonData.options; 

Ma poi di nuovo, Ext lo fa bene per voi, come Rene ha sottolineato attraverso la funzione Ext.decode

2

controllo questo campione violino che è per Ext JS 4. http://jsfiddle.net/mrigess/e3StR/

Ext 4 in avanti utilizza Ext.JSON.encode() e Ext.JSON.decode(); mentre Ext 3 utilizza Ext.util.JSON.encode() e Ext.util.JSON.decode()

Problemi correlati