【问题标题】:ExtJs Grid is not updating as per response textExtJs Grid 未根据响应文本更新
【发布时间】:2011-11-11 10:43:22
【问题描述】:

请在下面提到的情况下帮助我;

我的 Java Web 应用程序使用 JSON 作为数据交换格式。在跑步的时候; firebug(firefox) 按预期显示响应和 JSON 数据;但网格没有按预期更新,而是空白。下面是 store 和 grid 的定义;

//Grid & Store definition

    var searchResultStore = Ext.create('Ext.data.JsonStore', {
    model : 'BookModel',
    proxy : {
        type : 'ajax',
        reader : {
            totalProperty : 'results',
            type : 'json',
            root : 'data'
        }
    },
    autoLoad : true
});

Ext.define('Library.SearchBookGrid', {
    extend : 'Ext.grid.Panel',
    alias : 'widget.SearchBookGrid',
    id : 'searchBookGrid',
    title : 'Books',
    closable : true,
    initComponent : function() {

        this.store = searchResultStore;

        this.columns = [ {
            xtype : 'gridcolumn',
            dataIndex : 'title',
            text : 'Title'
        }, {
            xtype : 'gridcolumn',
            dataIndex : 'authorName',
            text : 'Author'
        } ];


        this.callParent(arguments);
    }
});

有一个BOOK SEARCH ExtJS表单;它调用 URL (/MyLibrary/Books?action=6) & 搜索表单值作为 JSONDATA 提交。将搜索结果分配给以下商店(searchResultStore);

    Ext.Ajax.request({
        url : '/MyLibrary/Books?action=6', 
        headers: {'Content-Type':'application/json; charset=utf-8'},
        jsonData : Ext.JSON.encode(form.getValues()),
        params:{
        action : 6
        },
        method : 'POST',
        success : function(response, request) {
               searchResultStore.loadData(Ext.JSON.decode(response.responseText));
        },
        failure : function(results, request) {
                Ext.Msg.alert("Search..", "Please try again...!!");
        },
});

我是否遗漏了什么或者我在这段代码中有错误......请帮助......!!!!

提前谢谢...!!

【问题讨论】:

  • 读取器仅用于存储加载 ajax 请求,因此对于您自己的 ajax 请求,数据应该是一个元素数组。不在根数据属性内,也许这可能是你的问题
  • 感谢您的回复 nscrob;你的意思是说...响应文本应该是 JSONArray 而不是 JSONObject...请纠正我...!!

标签: extjs grid


【解决方案1】:

鉴于我看到你在商店里放了一个带有根数据的阅读器,我希望你用来加载数据的 json 不是那种格式。

loadData 函数需要一个模型数组或元素数组。 比如[{"id":1},{....我担心的是你尝试使用阅读器,你的json看起来像:

{"data":[{"id:1},{..... 

那么这可能不是问题。希望对你有帮助

编辑问题是我在第一条评论中想说的,您在商店中设置的阅读器仅在通过加载功能加载商店时使用。 LoadData 需要一个数组,所以如果你想快速修复尝试:

searchResultStore.loadData(Ext.JSON.decode(response.responseText).data);

但我建议你使用 store 加载方法而不是使用 reader 的 ajax 请求。

  searchResultStore.load({
    url : '/MyLibrary/Books?action=6', 
    jsonData : Ext.JSON.encode(form.getValues()),
    extraParams:{
    action : 6
    },
})

查看load 函数的文档,看看它可以接受哪些参数

【讨论】:

  • 嗯.....我应该提到响应文本,如下所示; {"results":3,"data":[{"title":"Test Title 1","authorName":"Test AUthor 1"}, {"title":"Test Title 2","authorName":"测试作者 2"}, {"title":"测试标题 3","authorName":"测试作者 3"}]}
  • 是的..我刚刚发布了回复文本。
  • 第一行工作.. searchResultStore.loadData(Ext.JSON.decode(response.responseText).data);谢谢nscrob....祝您有美好的一天..!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2012-08-20
  • 2020-08-19
  • 2020-09-23
  • 1970-01-01
  • 2020-12-10
相关资源
最近更新 更多