2012-08-09 2 views
0

ExtJS로 작업하면서 또 다른 이상한 문제가 발생했습니다. 내 폴더 myapp/data/users.json에서 JSON 데이터를 얻지 만 원격 서버 (http : //myserver/users.json 또는 .../getusers.php)를 가리키는 URL 주소로 변경하면 아무런 JSON 데이터도 얻지 못합니다. .프록시 엔진을 사용하여 원격 서버에서 데이터를 가져올 수 없습니다.

내 코드 :

Ext.define('APP.store.Users', { 
    extend : 'Ext.data.Store', 
    model : 'APP.model.User', 
    autoLoad : true, 

    proxy : { 
     type : 'ajax', 
     url : 'http://myserver.com/users.json', 
     //api : { 
     // //read : 'data/users.json' // it works OK 
     //}, 

     actionMethods: { 
      read: 'GET' 
     }, 
     extraParams: { 
      action: 'someaction', 
      name: 'user' 
     }, 
     noCache: false,    
     reader : { 
      type : 'json', 
      root : 'users', 
      successProperty : 'success', 
      getResponseData : function(r) { 
       console.log("RESPONSE in reader: ", r); 
      } 
     }, 
     afterRequest : function(request, success) { 
      console.log(request, success); // success: either true or false 
     }, 

....

내가 설치 한 아파치 서버는 ExtJS를 사용하고 로컬 호스트/users.json와 SUCC에 대한 데이터를로드 할 수 있습니다. 문제가 내 시스템을 만들 수 있다고 생각했습니다. 그러나 방화벽을 해제 한 상태에서 Windows XP와 Windows 7을 모두 확인했습니다. 도움이되지 않았다.

방화 광 -> 네트워크는 원격 주소에 대해 HTTP 코드 200을 표시하지만 respone 탭에는 데이터가 없습니다 (이 경우 json 구조체).

Request headers from Firebug: 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language pl,en-us;q=0.7,en;q=0.3 
Access-Control-Request-He... x-requested-with 
Access-Control-Request-Me... GET 
Connection keep-alive 
Host myserver.com // WAS CHANGED 
Origin http://localhost 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1 

나는 무엇이 wrogn 일 수 있는지 전혀 모른다. 모두 괜찮을 것 같습니다.

감사합니다.

가짜

+0

내 답변에 대해서는 100 % 확신 할 수 없지만 AJAX는 도메인 간 요청을 지원하지 않으며 myserver.com을 참조하면 상호 도메인으로 간주됩니다. 이를 위해서는'jsonp'을 사용해야합니다. – Izhaki

답변

1

이이 문서에 포함되어

AjaxProxy 다른 도메인에서 데이터를 검색하는 데 사용할 수 없습니다. 응용 프로그램이 http://domainA.com에서 실행중인 경우 브라우저에 AJAX를 통해 서로 통신하는 도메인을 금지하는 기본 제공 보안 정책 이 있으므로 http://domainB.com의 데이터를로드 할 수 없습니다.

당신은 다른 도메인에서 데이터를 읽을 필요하고 실제로 온 것처럼 을 보이게 프록시 서버 (자신의 도메인의 웹 서버에서 실행하고 투명 http://domainB.com에 요청을 전달 일부 소프트웨어를 설정할 수없는 경우 http://domainA.com) Ext.data.proxy.JsonP 및의 서버가 인 경우 JSON-P (JSON with Padding)라는 기술을 사용하면 문제를 해결하는 데 도움이됩니다. JSON-P 응답을 지원합니다. 자세한 내용은 JsonPProxy의 소개 문서를 참조하십시오.

+0

내가 이해하는 한. localhost에서 개발하고 프로덕션 서버에서 프로젝트를 배포 할 준비가 되었습니까? – Bogus

+0

서버를 하드 코딩하지 마십시오. AJAX로 상대 경로를 사용할 수 있습니다. 그런 다음 서버를 전환하면 모두 작동합니다. –

관련 문제