【问题标题】:ExtJS grab JSON resultExtJS 抓取 JSON 结果
【发布时间】:2010-10-31 00:00:50
【问题描述】:

我正在从 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 应该包含示例消息,这是第二个示例消息。

谢谢。

【问题讨论】:

    标签: javascript php json extjs


    【解决方案1】:

    检查这个适用于 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()

    【讨论】:

      【解决方案2】:

      使用 successfailure 属性:

      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.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 以更加 Ext-ish 的方式进行操作:

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

        【讨论】:

        • 它可以工作,但我需要从“类别”选项访问所有消息。我可以做一个 jsonData.done 并且我得到“1”作为响应女巫很好但我将如何获取所有“消息”文本?
        • 谢谢,效果很好!在更多的事情上,如果可以的话:我如何收集所有消息并将它们显示在 Ext.Msg.alert 中?
        • 我在 Firebug 的 Array.map 示例中收到“messages.map 不是函数”错误。有什么我想念的吗?感谢和抱歉造成混乱,但我是初学者。
        • 正如我所说,分机不提供 map()。但是你可以使用一些定义它的库,比如 ext-basex:code.google.com/p/ext-basex
        • 迟到了,请提问!现在有没有机会从 JSON 中获取“完成”的价值?我的意思是在同一个 JsonStore 中。基本上,我需要知道 if(done == "1") 或 done == "0"。谢谢。
        【解决方案4】:

        如果您确定您的输入正确(谨防 xss 攻击),您可以使用 eval() 函数从您的 json 结果中创建您的 javascript 对象,然后可以通过您的命令访问该对象:

        var mymessages = jsonData.options;
        

        但话又说回来,Ext 为您做得很好,正如 Rene 通过 Ext.decode 函数指出的那样

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-04
          • 2017-09-24
          • 2016-07-23
          • 2021-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多