2013-06-12 64 views
0

我有,我想获得JSON格式从运动追踪数据的GWT应用程序,我可以用下面的IRL获得它:GWT的HTTP请求建设者返回空响应

http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXXXXXXXX 

,我会得到这样的数据

{"data":[{"duration_sec":2710,"sport":0,"speed_kmh_avg":11.721935764889876,"device_workout_id":"6588152507813057122","feed_id":155634169,"sport2":0,"id":192960126,"altitude_m_max":227.3,"hydration":0.35771,"altitude_m_min":145.5,"has_playlist":false,"burgers_burned":1.075926,"start_time":"2013-05-21 18:57:04 UTC","calories":581,"speed_kmh_max":26.281,"distance_km":8.824012756347656,"has_points":true},]} 

但不知何故,通过与GWT http请求生成器调用这个我不能做到这一点。我应该在代码中更改什么?

String url = "http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXXXXXXXX"; 
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 


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

     public void onError(Request request, Throwable exception) { 
      // Couldn't connect to server (could be timeout, SOP violation, etc.) 

     } 

     public void onResponseReceived(Request request, Response response) { 
      if (200 == response.getStatusCode()) { 
       trainingsJSON = JSONParser.parseStrict(response.getText()); 
       trainingsString = response.getText(); 
      Label l = new Label(); 
      l.setText("200 erros status code JSON DATA from endomondo " + response.getText()) ; 

      RootPanel.get().add(l); 
      } else { 
      // Handle the error. Can get the status text from response.getStatusText() 
       Label l = new Label(); 
       l.setText("JSON DATA from endomondo 3rror part " + response.getText()) ; 

       RootPanel.get().add(l);     
      } 
     }  
     }); 
    } catch (RequestException e) { 
     // Couldn't connect to server   
    } 

编辑

我曾尝试加入

builder.setHeader("Access-Control-Allow-Origin", "*");

,但没有运气。

回答

1

当您使用GWT进行CORS请求时,您不必为请求添加任何额外的标头。您必须做的是检查服务器是否支持来自您的站点的CORS请求。

如果您要管理站点http://api.mobile.endomondo.com,则必须更改服务器代码以在客户端发送OPTION请求时返回相应的CORS头。

在java服务器端的情况下,您有一个如何使用Filter来处理此page中的CORS的示例。

请注意,CORS只适用于现代浏览器(编辑:实际上某些浏览器的旧版本支持它)请参阅以下@Thomas评论中的浏览器列表)。

+0

注意:“现代浏览器”意味着每一个(Firefox,Chrome,Safari多年,Opera最近),但IE9-(IE10很好)。 –

+0

是的,IE9不在'我的'现代浏览器列表中。感谢Thomas –

+0

我还想指出,这里的“现代”包括几年前的浏览器(Firefox 3.5,Safari 4.0,Chrome -all版本,至少从4.0开始,Android 2.1)http://caniuse.com/cors –