2011-10-04 5 views
1

서버 응답을 얻기 위해 sencha touch에서 문제가 발생했습니다. 나는 내 서버와 서버에 통신 할 필요가있는 응용 프로그램을 가지고 있으며, 차례로 DB와 상호 작용하고 JSON 형식의 정보를 제공합니다. 이제 문제는 응용 프로그램이 모델을로드하는 데 필요한 응용 프로그램에 성공적으로 로그인하는 것입니다. 이 모델은 프록시를 사용하여 JSON을 다운로드하고 화면 UI에서 렌더링합니다. 여기서 문제가 시작됩니다.Sencha Touch Cant가 데이터 모델에 대한 JSON 응답을 디코딩하고로드합니다.

Servlet을 사용하여 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은"} 이제

, 여기 내 클라이언트 측 엽차입니다 터치 코드

여기

내 모델

내 가게 여기

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 또는 기타를 사용해야하는 프록시 요청 유형을 완전히 혼동합니다. 내 코드가 작동하지 않습니다. 도와주세요.

답변

3

문제는 독자에게 있습니다. 루트 : '데이터'를 지정하면 다음과 같은 json이 표시됩니다. 데이터 : [{ "quoteName": "홈 케어", "타임 스탬프": "May2011"} ... 루트 : '데이터'라인은 작동해야합니다.

편집 저장소는 프록시가 정의되어 있어야합니다. 이 상점 같은 구성

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"}, 당신이 경우, 전송 무엇 actualy 인 저장소에 대한 데이터가 데이터와 같은 속성에 있어야한다는 프록시의 구성 루트를 설정하십시오. [{....

+0

@nscrob ... 제대로 이해할 수 없습니다. 너 좀 잘 설명해 줄 수있어? –

+0

@nscrob .. 브라우저가 작동하지 않습니다. 잡히지 않은 오류 : ServerProxy를 사용하고 있지만 URL을 제공하지 않았습니다. –

+0

나는 extjs 4를 사용한다고 믿는다. 그래서 상점은 Ext.data.Store가되어야한다. JsonStore가 아니다. – nscrob