ExtJS Grid не обновляется в соответствии с текстом ответа

#extjs #grid

#extjs #сетка

Вопрос:

Пожалуйста, помогите мне в приведенной ниже ситуации;

Мое веб-приложение Java использует JSON в качестве формата обмена данными. Во время запуска; firebug (firefox) показывает ответ, а также данные JSON, как и ожидалось; но сетка обновляется не так, как ожидалось, скорее она становится пустой. Ниже приведены хранилище и определение сетки;

 //Grid amp; 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);
    }
});
  

Существует форма ExtJS для поиска КНИГ; которая вызывает URL (/MyLibrary/Books?действие = 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...!!");
        },
});
  

Я что-то пропустил или я ошибаюсь в этих кодах …… пожалуйста, помогите ….!!!!

Заранее спасибо …!!

Комментарии:

1. считыватель используется только в ajax-запросе загрузки хранилища, поэтому для вашего собственного ajax-запроса данные должны представлять собой массив элементов. не внутри корневого атрибута данных, возможно, это может быть вашей проблемой

2. Спасибо за ваш ответ nscrob; вы хотите сказать … текст ответа должен быть JSONArray вместо JSONObject… пожалуйста, исправьте меня …!!

Ответ №1:

Учитывая, что я видел, как вы поместили программу чтения в хранилище с корневыми данными, я надеюсь, что json, который вы используете для загрузки данных, не имеет этого формата.

Функция loadData ожидает массив моделей или массив элементов. например, [{"id":1},{.... меня беспокоит то, что вы пытаетесь использовать reader, и ваш json выглядит как:

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

Опять же, это может быть не проблема. Я надеюсь, что это поможет

РЕДАКТИРОВАТЬ ну, проблема в том, что я пытался сказать в первом комментарии, считыватель, который вы установили в хранилище, используется только при загрузке хранилища с помощью функции загрузки. loadData ожидает массив, поэтому, если вы хотите быстро исправить, попробуйте:

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

Но я предлагаю вам использовать метод загрузки хранилища вместо запроса ajax, который будет использовать reader.

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

Проверьте документы на наличие функции load и посмотрите, какие параметры она может принять

Комментарии:

1. Что ж ….. я должен упомянуть текст ответа, и это выглядит следующим образом; {«результаты»: 3, «данные»: [{«title»: «Название теста 1», «AuthorName»: «Автор теста 1»}, {«title»: «Название теста 2», «AuthorName»: «Автор теста 2»}, {«title»: «Название теста 3», «AuthorName»: «Автор теста 3»}]}

2. да .. я только что опубликовал текст ответа.

3. Первая строка сработала.. searchResultStore.loadData(Ext.JSON.decode(response.responseText).data); Спасибо, nscrob …. хорошего дня ..!!