0

我使用 JsonpRequestBuilder 在另一个站点上执行 url。按照我的代码:

public void execute() {
    JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
    jsonp.requestObject(url, new AsyncCallback<JavaScriptObject>() {
        public void onFailure(Throwable throwable) {
        }

        public void onSuccess(JavaScriptObject jso) {
            JsArray<AdminSessionData> entries = asStartArrayOfResultData(jso);
            AdminSessionData entry = entries.get(0);
            if (entry.getSuccess()) {
                eventBus.fireEvent(new LogoutEvent());
            }
        }
    });
}

我的代码在 Chrome 和 FireFox 上运行良好,但 IE 有问题。使用 IE,第一次执行时运行良好,但第二次执行时 url 无法执行,因为 IE 从第一次运行时通过 url 缓存了此结果。你看到这个问题了吗?请告诉我你的建议。谢谢

4

2 回答 2

0

你是在 devMode 下运行的吗?您是否在 ProdMode 中进行过测试?

如果您从 IE 中查看网络控制台,您会看到什么?

您是否对缓存持肯定态度,因为该代码很常见...

于 2013-06-07T08:39:02.110 回答
0

Jsonp 使用脚本标签,这意味着它向服务器发出 GET 请求。

传统上,即使请求有查询字符串,IE 也会缓存 GET 请求,因此正常的解决方法是更改​​每个请求中的查询字符串。

但是 gwt 每次创建新的时都会更改回调参数,JsonpRequest因为它会创建一个新的临时回调函数,该函数具有唯一的名称,因此除非您重用JsonpRequest.

强制请求可以做的最安全的事情是更改服务 url 添加一个随机参数,如下所示:

  String sendUrl = (url.contains("?") ? "&" : "?") + 
           "foo=" + Duration.currentTimeMillis()
于 2013-06-07T18:29:45.543 回答