0

我继承的 Struts2 + dojo Web 应用程序有问题。该应用程序适用于 IE9 和 Firefox,但不适用于 Chrome。

这是提交按钮代码:

<button dojoType="dijit.form.Button" 
        type="submit" 
        onclick="sendRuleForm('requestSubmitForm', 'resultDiv', 'RequestSubmit.action');">Submit</button>

这是上面 sendRuleForm 函数的 javascript 代码:

function sendRuleForm(formId, id, actionNm) {
    var bindArgs = {
        url: actionNm,
        form: document.getElementById(formId),
        handleAs: "text",
        load: function(data) {
            document.getElementById(id).innerHTML = data;            
        },
        error: function(data) {
            alert(data);
            return;
        }
    }
    dojo.xhrPost(bindArgs);
    document.getElementById(id).innerHTML = ajaxLoader;
}

我注意到,如果我在 Java 代码中设置断点,甚至在操作完成 之前,网页就会返回错误。

Chrome 开发人员工具指示操作/请求的已取消状态(在 Chrome 开发人员工具中,资源的 status=canceled 是什么意思?

我使用的是旧版本的 dojo 1.3.1,但将其更新到最新版本并没有解决问题。

谁能解释这种行为并让我知道如何解决这个问题?

4

1 回答 1

2

您可以排除此错误的 ajax / javascript 位。它是

  1. chrome 中的错误(不太可能)
  2. 您正在调用的 struts 页面中的错误,可能会发回奇怪的 HTTP 响应(检查服务器日志)
  3. 表单提交中有一个“抖动”,其中发送了多个请求。我猜,但也许在 chrome 中的处理方式<button type="submit"不同<input type="submit"

您在重定向到不同页面时遇到的情况可能是由于当您手动刷新新选项卡中的 URL 字段时 Struts 应用程序接收到 GET。也可能是由于缺少登录cookie等。

要获得应用程序的真实响应,请尝试target使用您的属性输入form,然后以正常方式提交(不使用 XHR)。

<form action="RequestSubmit.action" method="POST" target="_debugwin">
    <input type="submit" value="DebugSubmit" name="debugbutton" />
     ... remainder of form code

此外,您的 dijit Button 有一个可覆盖的函数“onClick”,请注意 camelCasing。您正在设置 DOM onclick 事件。在这种情况下,您的 click 事件可能会在 dojo.xhr 触发后(函数返回时)立即由浏览器处理。请参阅此问题:使用 Dojo 阻止表单提交

但是,唯一的方法是,如果表单是在 (i) 框架中加载的,那么您在调试窗口中看到的“已取消”错误是这种情况。否则,整个页面将刷新,网络监控将重置。作为一种简单、双赢的解决方法,请按如下方式调整 onclick 属性:

<button dojoType="dijit.form.Button" 
        type="submit" 
        onClick="sendRuleForm('requestSubmitForm', 'resultDiv', 'RequestSubmit.action'); /* NOTE */ return false;">Submit</button>
于 2012-10-27T14:16:20.223 回答