【问题标题】:Call Wicket from Javascript - ajax request is not done从 Javascript 调用 Wicket - ajax 请求未完成
【发布时间】:2019-02-08 14:48:25
【问题描述】:

我从 Wicket 创建了一个 javascript 方法,它将重新加载一个面板:

Behavior behave = new AbstractDefaultAjaxBehavior() {
        @Override
        protected void respond(AjaxRequestTarget target) {
            target.appendJavaScript(JavascriptUtils.functionCallback(INIT_JQUERY_UPLOAD_JS));
            target.add(photosetsContainer);
        }

        /**
         * Creates a javascript method: reloadImagesPanel(duplicateImagesList) and renders it in head section of
         * html. This method is called after the user selects images using uploader.
         */
        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);
            CharSequence callback = getCallbackScript();
            String reloadImagesJs = JavascriptUtils.function(RELOAD_IMAGES_PANEL_JS, callback.toString());
            response.render(JavaScriptHeaderItem.forScript(reloadImagesJs, null));
        }

    };
    add(behave);

我正在使用 jquery.fileupload 上传一些图片:

$('.fileupload').fileupload({
  dataType: 'json',
  done: function (e, data) {
    reloadImagesPanel();
  },
  fail: function (e, data) {
    alert("There was a problem while uploading, please try again!");
  },
  progress: function (e, data) {
    $(e.target).closest('.multipleUploadButtonContainer').find('.imagesUploadSpinner').spin(SPINNER_MIN_OPTS);
  }
});

RELOAD_IMAGES_PANEL_JS = reloadImagesPanel

所以,当我上传图像时,它们被移动到相应的文件夹,调用 reloadImagesPanel(),但控制台网络选项卡中没有 GET 请求告诉我服务器端的 respond 方法已完成,当然,面板也已重新加载。

这是我期望看到的:

enter image description here

日志文件中没有错误,控制台中没有错误,它适用于本地主机,但不适用于生产环境。

这怎么可能?为什么客户端调用了RELOAD_IMAGES_PANEL_JS wicket 方法,而respond(AjaxRequestTarget target) 方法却从不丰富?

【问题讨论】:

  • 选中浏览器开发工具中的Preserve logs 复选框以验证是否确实存在Ajax 调用。
  • 这是问题所在:即使调用了 reloadImagesPanel(),Ajax 调用也不会出现在 Network 选项卡中。今天我还注意到,如果我将 locale=en 添加到我的 url,它就可以工作。我的应用是芬兰语。
  • 听起来问题出在您的 JavaScript 代码中 - 在 reloadImagesPanel() 函数中。

标签: javascript ajax wicket jquery-file-upload wicket-7


【解决方案1】:

最后我们发现了问题:我们有一个外部工具,可用于在我们的应用中插入 javascript 代码,而该代码存在明显破坏检票口功能的问题。

我们通过在浏览器的控制台中调试 jquery 和 wicket js 代码发现了问题,并将工作案例场景与损坏的案例场景进行了比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多