我正在GWT中编写一个应用程序,它应该从外部服务器获取JSON。我正在使用JsonpRequestBuilder
但我总是遇到失败(超时),因为这是一个JSON no JSONP。
如果我有自己的服务器,那么我就可以更改响应格式(到JSONP)。
我可以改变什么才能让它发挥作用?
我已经使用Google Chrome的调试器进行了检查,而且我做了!获得响应,但不知何故代码落入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
答案 0 :(得分:2)
我们正在使用maven和JBoss 7.2.0。但是如果你想要/也需要最小化或没有变化,你也应该能够在Tomcat或其他容器中使用它。
我们是使用dsmiley's 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>