2011-06-16 85 views
2

哦你好,各位SO成員,GET請求使用GWT檢索XML數據?

我有使用是這樣一個簡單的GET請求返回XML數據的Web服務:

http://my-service:8082/qc/getData?paramX=0169&paramY=2

服務頁面返回原始XML根據參數的值。

我想從使用RequestBuilder,Request等的GWT中的GET請求中檢索這個數據。 但是,響應給了我空的文本,一個ZERO狀態碼(這不代表什麼,也不是應該發生)等等。

下面是不起作用的簡化代碼。

public class SimpleXML implements EntryPoint { 

public void onModuleLoad() { 

    this.doGet("http://my-service:8082/qc/getData", "0169", "2"); 
} 

public void doGet(String serviceURL, String paramX, String paramY) { 
    final String getUrl = serviceURL + "?paramX=" + paramX + "&idTarification=" + paramY; 

    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, getUrl); 

    try { 
     Request response = builder.sendRequest(null, new RequestCallback() { 

      @Override 
      public void onResponseReceived(Request request, Response response) { 
       response.getStatusCode(); // Gives me 0 (zero) :(
      } 

      @Override 
      public void onError(Request request, Throwable exception) { 
       // ... doesn't matter for this example 
      } 
     }); 
    } catch (RequestException e) { 
     // ... doesn't matter for this example 
    } 
} 

} 

我不明白爲什麼這是行不通的,因爲這是非常簡單的,我見過的教程,他們都告訴我的處事這樣..

在此先感謝

回答

4

原因是,瀏覽器不允許使用AJAX進行跨站點請求(請參閱Same Origin Policy)。

這意味着,您只能在與您的HTML頁面相同的服務器,相同的端口(使用相同的協議)上調用服務。如果您想執行跨站點請求,可以使用JSONP,如http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html中所述。

+0

那麼,如果收到的數據是XML格式,我還可以使用JSON P來製作這個跨站點請求嗎? 是否有其他解決方法(使用AJAX以外的其他方法?) – dominicbri7 2011-06-16 18:33:18

+0

另外,我看不到這是一個AJAX調用,是不是一個簡單的HttpRequest(GET)? – dominicbri7 2011-06-16 18:50:20

+0

@dominic:從純粹的HTTP角度來看,這只是另一個GET請求。但從瀏覽器的角度來看,這是一個AJAX(XHR)請求。 /您可以使用JSONP傳輸XML - 只需將XML放入JSON字符串中(確保使用正確的轉義!)。 – 2011-06-16 19:25:30