0

所以我目前正在尝试使用 JsonpRequestBuilder API 来尝试访问远程文件,但是我只是在使用 google 网页链接进行测试,并且遇到了超时异常。不太确定我在这里缺少什么。任何帮助,将不胜感激。

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();
}

}

package com.webapp.client;

import com.google.gwt.core.client.JavaScriptObject;

public class ExcelFileJavascriptObject extends JavaScriptObject{ protected ExcelFileJavascriptObject(){

}

}

4

2 回答 2

1

您正在打破“某些来源政策”的 ajax 限制。如果您的 GWT 应用程序部署在“ http://www.google.ca ”上,您只能使用 Ajax 下载该文件,我认为它不是,不是吗?

从不同域获取信息的唯一方法是:像您尝试使用的那样使用“ JSONP ”或“ CORS ”,在这两种情况下,另一个域应该与您的应用程序达成协议,以便在如果您想使用 CORS,或者如果您想要 JSONP,则为了用回调包装响应,您尝试请求的 url 没有发生什么。

如果您想探索这两种方法,我为 gwtquery 项目编写的这个Ajax 页面可能会很有用。

于 2013-10-17T05:37:13.063 回答
0

JSONP 加载一个 JavaScript(使用一个<script>元素绕过SOP),脚本简单地调用一个函数,该函数的名称作为参数传递到脚本 URL 的查询字符串中,并且接受一个参数。

这意味着您不能使用它来加载Excel 文件。

GWT 论坛上的这篇文章中,您说您想要“将 Excel 文件从不同的域下载到 GWT 服务器上,然后稍后对其进行解析”。
如果您想从服务器加载东西到服务器,请不要通过客户端:使用URLConnectionApache HttpClient、JAX-RS 2 客户端 API(使用 Resteasy 或 Jersey 作为实现)、OkHttp 等。

于 2013-10-17T12:48:15.377 回答