2010-06-07 7 views
2

나는 새로운 gwt에서 방화범을 사용하는 것에 익숙하다. MY gwt 버전은 2.0.0입니다. 이클립스와 WAMP를 사용합니다. 내 IIS는 WAMP 아파치를 실행하지 않습니다. 그때 나는 GWT에서 보여하려고 나는 "http://localhost/phpmyadmin/tesdb3/datauser.php는" json 파서 빈 결과

{"item": [{"kode":"002","nama":"bambang gentolet"}, 
      {"kode":"012","nama":"Algiz"}]} 

내가

<inherits name='com.google.gwt.json.JSON'/> 
<inherits name="com.google.gwt.http.HTTP" /> 

와 XML을 추가에있는 tesdb3.php에서 유효한 JSON 결과가 파이어 폭스
내 프로그램을 실행 이 코드와 함께.

public class Tesdb3 implements EntryPoint { 

String url= "http://localhost/phpmyadmin/tesdb3/datauser.php"; 

public void LoadData() throws RequestException{    

    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url)); 

    builder.sendRequest(null, new RequestCallback(){ 
     @Override 
     public void onError(Request request, Throwable exception) { 
      Window.alert("error " + exception); 
     } 
     public void onResponseReceived(Request request, 
       Response response) { 
       if (200 == response.getStatusCode()) { 
        Window.alert("ok -" + response.getText() + "-" + response.getStatusCode()); 
       } else { 
        Window.alert("error2 -" + response.getText()+ response.getStatusText() + "-" + response.getStatusCode()); 
       }   
     } 
    }); 
} 

public void onModuleLoad() {   
    try { 
     LoadData(); 
    } catch (RequestException e) { 
     e.printStackTrace(); 
    }  
} 
} 

개발 모드로 실행합니다. 호스팅 모드가 아닙니다.
내 코드에서 오류를 나타내지 않았습니다. 그러나 창 경고의 결과는 "error2 - OK-0"입니다.

result Net from firebug is 7 request: 
get Tesdb3.html?gwt.codeserv = 200ok 
get Tesdb3.css = 200ok 
get tesdb3.nocache.js = 200ok 
get hosted.html?tesdb3 = aborted 
get standard.css = 304 not modified 
get hosted.html?tesdb3 = 403 not modified 
get datauser.php = 200ok 

내 질문은 :

응답 상태 코드가 0이고, 응답 상태 텍스트가 'OK'왜? json 또는 Java 코드에 오류가 없습니다.

response.getText이 비어 있습니까? json 결과를 단일 문자로도 얻을 수없는 이유는 무엇입니까?

도와주세요. 이미 2 개월 동안이 문제를 많은 소스 유형으로 해결하려고 시도했지만 단일 결과를 얻을 수 없습니다.

이 내 datauser.php

header('Content-type: application/json; charset=UTF-8'); 
    header('Cache-Control: no-cache'); 
    header('Pragma: no-cache'); 

    $link = mysql_connect("localhost", "root", "") 
     or die("Could not connect : " . mysql_error()); 
    mysql_select_db("tesku1") or die("Could not select database" . mysql_error()); 

    $query = "select * from tabel1"; 
    $result = mysql_query($query); 

    $jumlah_data = mysql_num_rows($result); 

    echo '['; 

    for ($i=0; $i<=count($result); $i++){ 
     $row = mysql_fetch_array($result); 

     echo '{'; 
     echo "\"kode\":\"$row[kode]\","; 
     echo "\"nama\":\"$row[nama]\""; 

     if ($i==count($result)){ 
     echo '}'; 
     }else 
     echo '},'; 
    } 
    echo ']'; 

    mysql_free_result($result); 
+0

프록시를 통해 요청을 실행하거나 방화 광을 사용하여 정확히 무엇이 응답인지 알려줄 수 있습니까? – tgdavies

+0

JSON 출력의 올바른 헤더를 설정하고 있습니까? 'header ('Content-type : application/json; charset = UTF-8'); 그리고 다른 상태 유형은 어떻습니까? 마찬가지로 404 또는 500이 "통과"하거나 상태 코드 0이 발생합니까? –

+0

@tdavies : 그는 이미 Firebug의 Net 탭에서 결과를 게시했습니다. –

답변

0

글쎄 문제가 SOP (동일 기원 정책) 및 크로스 사이트 요청이있는 것처럼 보인다. 요청이 교차 사이트 인 경우 내가 얻은 것부터 자세히 설명하지는 않지만 RequestBuilder를 사용할 수 없습니다.
교환하려면 getJson() 및 JSNI 오버레이 유형을 사용하십시오. 이 자습서의 모든 예 : http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html. 가격 값을 데이터베이스 값으로 변경합니다. 결국 .. 내 브라우저에서 내 데이터베이스가 나타납니다 (예! 예! (T-T)).

0

동일한 문제가 있습니다. 두 페이지가 같은 컴퓨터에 있기 때문에 우리가하려는 일은 SOP 문제가 아니어야합니다. 문제는 우리가 웹을 테스트 할 때 eclipse가 실행하는 것에 관한 것입니다. 이 문제를 해결하려면 war 폴더를 htdocs에 복사하고 인터넷 익스플로러를 사용하여 실행하면 코드가 올바른지 확인하게됩니다. 이클립스에서 실행을 설정하는 가능성이 있지만, 나는 아직 얼마나 몰라.

+0

답변 대신 의견에 주석을 넣으십시오. – user1211929

1

나는 오래된 게시물 인 것을 알고 있지만, 현재이 문제가있는 모든 사람들에게 답변을 게시 할 예정입니다.

이 문제의 원인은 SOP (Same Origin Policy)입니다. 이 문제는 PHP 스크립트가 GWT 또는 JavaScript 웹 애플리케이션과 동일한 도메인에 있지 않기 때문에 발생합니다.

header('Access-Control-Allow-Origin: *'); 

이것은 PHP 스크립트가 실행되는 곳에서 도메인 (사이트)가 다른 도메인의 요청을 받아들이는 GWT를 말할 것이다 :

솔루션은 다음과 같이 당신의 PHP 스크립트에 새 헤더를 추가 매우 간단합니다 (사이트).

는 특정 사이트에 대한 요청이 단지 다음과 같은 헤더를 추가 제한하려면 : http://mysite.com에서 자바 스크립트가 HTTP 요청을

header('Access-Control-Allow-Origin: http://mysite.com'); 

.