【发布时间】:2013-06-09 06:12:53
【问题描述】:
我正在用 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
【问题讨论】:
-
我们通过运行代理 servlet 为我们所有的外部站点伪造本地位置来修复它。我们在 JBoss 中运行 JEE 应用程序,所以我们使用:github.com/dsmiley/HTTP-Proxy-Servlet
-
你能在代码上展示一下你是怎么做到的吗? (这样我才能接受你的回答?)
-
您的“跨站托管模式尚未实现”错误是由于使用了
<add-linker name="xs"/>。这与您的第一个问题无关。如果您需要它,请改用<add-linker name="xsiframe"/>(如链接问题所述) -
@Patryk 我在下面添加了一个示例。您的应用会点击
localhost/deployment_root/firstResource/path/to/resource,然后转发到http://targethost:port/and/root/path/path/to/resource...希望对您有所帮助。
标签: java json gwt jsonp httprequest