PHP witchから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にはサンプルメッセージが含まれている必要があります。これは2番目のサンプルメッセージです。
ありがとうございました。
簡単なアプローチ:
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"));
});
}
最後のコメントに対処するもう1つの例:
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);
successおよびfailureプロパティを使用します。
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 ドキュメントを参照してください
ext JS 4用のこのサンプルフィドルを確認してください。 http://jsfiddle.net/mrigess/e3StR/
Ext 4以降では、Ext.JSON.encode()
およびExt.JSON.decode()
を使用します。 Ext3はExt.util.JSON.encode()
とExt.util.JSON.decode()
を使用します
入力が正しいことが確実な場合(xss攻撃に注意)、eval()関数を使用してjsonの結果からjavascriptオブジェクトを作成し、コマンドからアクセスできます。
var mymessages = jsonData.options;
しかし、繰り返しになりますが、ReneがExt.decode関数を通じて指摘したように、Extはそれをうまく実行します。