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にはサンプルメッセージが含まれている必要があります。これは2番目のサンプルメッセージです。

ありがとうございました。

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を使用してより拡張的な方法でそれを行うことができます。

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

詳細については、ExtAPIのドキュメントを参照してください

于 2009-06-03T13:56:53.557 に答える
2

Ext JS4用のこのサンプルフィドルを確認してください。http://jsfiddle.net/mrigess/e3StR/

Ext4以降はandを利用Ext.JSON.encode()Ext.JSON.decode()ます; Ext3Ext.util.JSON.encode()Ext.util.JSON.decode()

于 2012-06-12T11:02:57.090 に答える
1

入力が正しいことが確実な場合(xss攻撃に注意)、eval()関数を使用してjsonの結果からjavascriptオブジェクトを作成し、コマンドからアクセスできます。

var mymessages = jsonData.options;

しかし、繰り返しになりますが、ReneがExt.decode関数を通じて指摘したように、Extはそれをうまく実行します。

于 2009-06-03T14:15:54.923 に答える