所以我目前正在尝试使用JsonpRequestBuilder API来尝试访问远程文件,但我只是使用google网页链接进行测试,而且我收到了Timeout异常。不太清楚我在这里缺少什么。任何帮助将不胜感激。
package com.webapp.client;
import java.util.logging.Logger;
import com.webapp.client.ExcelFileJavascriptObject;
import com.google.gwt.jsonp.client.JsonpRequestBuilder;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class DataHttpRequest {
private final String url2 = "http://www.google.ca";
private Logger logger = Logger.getLogger("DataRequest.java");
public void retrieveFile() {
JsonpRequestBuilder builder = new JsonpRequestBuilder();
builder.requestObject(url2,
new AsyncCallback<ExcelFileJavascriptObject>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
logger.severe(caught.getMessage());
logger.severe(caught.toString());
}
@Override
public void onSuccess(ExcelFileJavascriptObject result) {
// TODO Auto-generated method stub
Window.alert(result.toString());
}
});
}
public void onModuleLoad() {
retrieveFile();
}
private final String url2 = "http://www.google.ca";
private Logger logger = Logger.getLogger("DataRequest.java");
public void retrieveFile() {
JsonpRequestBuilder builder = new JsonpRequestBuilder();
builder.requestObject(url2,
new AsyncCallback<ExcelFileJavascriptObject>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
logger.severe(caught.getMessage());
logger.severe(caught.toString());
}
@Override
public void onSuccess(ExcelFileJavascriptObject result) {
// TODO Auto-generated method stub
Window.alert(result.toString());
}
});
}
public void onModuleLoad() {
retrieveFile();
}
}
package com.webapp.client;
import com.google.gwt.core.client.JavaScriptObject; public class ExcelFileJavascriptObject extends JavaScriptObject{
protected ExcelFileJavascriptObject(){
}
答案 0 :(得分:1)
您违反了'Some Origin Policy'ajax限制。如果您的GWT应用程序部署在“http://www.google.ca”,我只能使用Ajax下载该文件,我想它不是,不是吗?
从其他域获取信息的唯一方法是:使用“JSONP”,就像您尝试使用的那样,或“CORS”,在这两种情况下,其他域都应该与您的应用程序,以便在您想要使用CORS的情况下设置适当的标头,或者如果您想要JSONP以便使用回调包装响应,那么您尝试请求的URL不会发生这种情况。
如果你想探索这两种方法,我为gwtquery项目写的Ajax page可能很有用。
答案 1 :(得分:0)
JSONP将JavaScript(使用<script>
元素加载到绕过 SOP),其惯例是脚本只调用一个函数,该函数的名称在脚本URL的查询字符串中作为参数传递并且只需要一个参数。
这意味着您无法使用它来加载 Excel文件。
在this post on the GWT forum中,您说要“将其他域中的Excel文件下载到GWT服务器上,然后再解析”。
如果要从服务器加载到服务器,请不要通过客户端:使用URLConnection
或Apache HttpClient,JAX-RS 2客户端API(使用Resteasy或Jersey作为实现),OkHttp等。