Sencha Touch Cant декодирует и загружает JSON-ответ на модель данных - PullRequest
1 голос
/ 04 октября 2011

Я ужасно страдаю от одной из проблем в sencha touch для получения ответа сервера. У меня есть приложение, в котором мне нужно связаться с моим сервером, а сервер, в свою очередь, будет взаимодействовать с БД и обрабатывать информацию в форме JSON. Теперь моя проблема заключается в успешном входе в приложение, которое требуется приложению для загрузки моделей. Модели используют прокси для загрузки JSON и визуализации на экране интерфейса. Проблема начинается здесь.

Я использую сервлет для получения сервиса JSON. Например, я жестко закодировал JSON. Найдите приведенный ниже код сервлета.

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LoginJSONServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;       

    public LoginJSONServlet() {
        super();       
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       
        try {
            response.setContentType("application/json");                        
            String jsonText = "[{\"quoteName\":\"Home care\",\"timeStamp\":\"May2011\"}]";                  
            response.getWriter().write(jsonText);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

После развертывания печатается требуемый JSON в браузере как {"quoteName": "Уход на дому", "timeStamp": "May2011"}

Теперь, вот мой сенсорный код sencha на стороне клиента

вот мой магазин

App.stores.SavedStore = new Ext.data.JsonStore({
    model: 'SavedModel',
    autoLoad: true
});

вот моя модель

App.models.SavedQuoteMod = Ext.regModel('SavedQuoteMod', {
   fields: [
       {name:'quoteName' , type: 'string' },
       {name:'timeStamp' , type: 'string' }
   ],


   proxy:{
          type: 'ajax',
          format: 'sencha',
          url: 'http://localhost:8091/Sencha/LoginServlet',
          reader: {
               type: 'json',
               root: 'data'
          },


  /* proxy:{
    type: 'ajax',
    url: 'http://172.16.30.18:8091/Sencha/JSONServlet',
    reader: {type:'json'},
    writer: {type:'json'},
   }*/                       
});

Я полностью сбит с толку, какой тип запроса прокси я должен использовать Ajax, JSONP или любой другой. Мой код не работает. Помогите мне, пожалуйста.

1 Ответ

3 голосов
/ 04 октября 2011

Проблема с ридером. Если вы укажете root: 'data', он будет ожидать json, который выглядит следующим образом: data: [{"quoteName": "Уход на дому", "timeStamp": "May2011"}, ... так что просто удалите строку root: data, и она должна работать

Редактировать Магазин - это тот, у кого должен быть определен прокси.

App.stores.SavedStore = new Ext.data.JsonStore({
    model: 'SavedQuoteMod',
    autoLoad: true,
    proxy:{
          type: 'ajax',
          format: 'sencha',
          url: 'http://172.16.30.18:8091/Sencha/subhash.json',
          reader: {
               type: 'json',
          },

});

App.models.SavedQuoteMod = Ext.regModel('SavedQuoteMod', {
   fields: [
       {name:'quoteName' , type: 'string' },
       {name:'timeStamp' , type: 'string' }
   ]
});

Сконфигурированный таким образом, магазины ожидают, что json будет содержать массив кортежей, таких как [{"quoteName": "Уход на дому", "timeStamp": "May2011"}, который фактически соответствует тому, что вы отправляете, если вы установили корень конфигурации для прокси-сервера он ожидает, что данные для хранилища будут иметь такой атрибут, как data: [{....

...