2

我正在用 GWT 编写一个应用程序,它应该从外部服务器获取 JSON。我正在使用JsonpRequestBuilder,但我总是失败(超时),因为这是一个没有 JSONP 的 JSON。

如果我有自己的服务器,那么我将能够更改响应格式(为 JSONP)。

我可以改变什么来让它工作?

我已经用谷歌浏览器的调试器检查了它,我做到了!得到响应,但不知何故代码落入该onFailure方法,我不能使用响应。

String url = "http://api.mobile.endomondo.com/mobile/api/workout/list?authToken=XXXX";

JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.setTimeout(100000);
jsonp.setCallbackParam("callback");
 jsonp.requestObject(url,
     new AsyncCallback<TrainingData>() { // Type-safe!

       @Override
       public void onFailure(Throwable throwable) {
         // Easy to debug! (hopefully)
           Window.alert(throwable.getMessage());
       }
       @Override
       public void onSuccess(TrainingData trd) {
         // Success!
           //Window.alert("JSON obtained");
           Window.alert(trd.getEntries().toString());
         }
       });

编辑现在我得到

跨站点托管模式尚未实现。请参阅问题 http://code.google.com/p/google-web-toolkit/issues/detail?id=2079

4

1 回答 1

2

我们正在使用 Maven 和 JBoss 7.2.0。但是,如果您希望/需要也可以在 Tomcat 或其他容器中进行最小更改或无需更改,您也应该能够使其在 Tomcat 或其他容器中工作。

我们使用dsmiley 的 httpproxy servlet完成了它:下载并构建它,将其添加到您的 maven 存储库(或者忘记 pom.xml 文件,只需将新构建的 jar 添加到您的库中)。

在我们的 pom.xml 文件中,我们添加一个依赖项:

   <dependency>
      <groupId>org.mitre.dsmiley.httpproxy</groupId>
      <artifactId>smiley-http-proxy-servlet</artifactId>
      <!-- 1.3-SNAPSHOT adds ability to handle spaces in paths, 1.2 works otherwise -->
      <version>1.3-SNAPSHOT</version>
   </dependency>

在您的 web.xml 添加 servlet 映射:

   <servlet>
      <servlet-name>FirstResourceProxy</servlet-name>
      <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
      <init-param>
         <param-name>targetUri</param-name>
         <param-value>http://targethost:port/and/root/path</param-value>
      </init-param>
      <init-param>
         <param-name>log</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>FirstResourceProxy</servlet-name>
      <url-pattern>/firstResource/*</url-pattern>
   </servlet-mapping>

   <servlet>
      <servlet-name>SecondResourceProxy</servlet-name>
      <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
      <init-param>
         <param-name>targetUri</param-name>
         <param-value>http://targethost:port/and/root/path</param-value>
      </init-param>
      <init-param>
         <param-name>log</param-name>
         <param-value>true</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>SecondResourceProxy</servlet-name>
      <url-pattern>/secondResource/*</url-pattern>
   </servlet-mapping>
于 2013-06-13T20:46:34.937 回答