gpt4 book ai didi

javascript - JavaScript 是否应该调用 Wicket.Ajax.ajax 触发页面重新加载(Wicket v6.13)?

转载 作者:行者123 更新时间:2023-11-29 19:43:00 32 4
gpt4 key购买 nike

我想将 ajax 事件从浏览器发送到 wicket 面板,以便它可以刷新标签的内容。我还需要从 javascript 函数发送这个请求。

它工作正常 - 正在发送 ajax 请求,并且 repose 包含预期的更新标签:

Ajax 请求:

http://localhost:8080/cyclop/cyclop/ced?1-3.IBehaviorListener.0-historyPanel&_=1392727280955

和响应:

<?xml version="1.0" encoding="UTF-8"?><ajax-response><component id="idf" ><![CDATA[<div id="idf">6</div>]]></component></ajax-response>

问题是,我还可以在网络监视器中看到另一个请求:它获取整个页面的内容。它不会重新加载页面本身,只是获取其内容。

这是什么原因?这正常吗?

编辑:我能够更深入地调查它:wicket 触发两个 ajax 请求:

  1. localhost:8080/cyclop/cyclop/ced?2 - 这个返回整个页面
  2. localhost:15111/cyclop/cyclop/ced?2-11.IBehaviorListener.0-historyPanel - 这一个 ajax 响应

代码如下:

包含触发 ajax 请求的链接的 HTML 页面的一部分:

<li><div class="cq-tabHistory">MY LINK</div></li>

和注册 wicket 回调的 java 脚本:

$(".cq-tabHistory").on("click", function() {    Wicket.Ajax.ajax({"u" : link, "c" : comp}); }

这是在服务器端注册 ajax 回调的 wicket 面板类

Label counter ;
public HistoryPanel(String id) {
super(id);

counter= new Label("counter", new IModel<String>() {
@Override
public String getObject() {
count++;
return count + "";
}

@Override
public void setObject(String o) {
}

@Override
public void detach() {
}
});
add(counter);
counter.setOutputMarkupId(true);
}

public void init() {
browserCallback = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
target.add(counter);
}
};
add(browserCallback);
browserCallbackUrl = browserCallback.getCallbackUrl().toString();
}

@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(OnDomReadyHeaderItem.forScript(browserCallback.getCallbackScript()));
}

最佳答案

我发现了问题。

我的自定义 java 脚本函数通过此类请求在后端调用 wicket 组件:

Wicket.Ajax.ajax({"u":"./ced?2-1.IBehaviorListener.0-historyPanel","c":"historyPanel17"});

为了在 java 脚本中访问此 URL,我调用了设置全局 java 脚本变量的自定义 java 脚本函数 - 这发生在我的组件的方法 renderHead(IHeaderResponse response) 中。到目前为止没有什么奇怪的....

问题是我过早地在构造函数中获取了回调 URL,就在创建 AbstractDefaultAjaxBehavior 之后。这导致 1-0.IBehaviorListener.0-historyPanel - 此 url 包含我的组件的错误版本(其设置为 0)。调用 browserCallback.getCallbackUrl() 必须移动到 renderHead(IHeaderResponse response) - 在这种情况下它包含正确的组件 ID 和正确的版本

关于javascript - JavaScript 是否应该调用 Wicket.Ajax.ajax 触发页面重新加载(Wicket v6.13)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854387/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com