我对我继承的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开发者工具指示已取消操作/请求的状态(What does status=canceled for a resource mean in Chrome Developer Tools?)
我使用的是旧版本的dojo 1.3.1,但将其更新到最新版本并没有解决问题。
任何人都可以解释这种行为,让我知道如何解决这个问题吗?
答案 0 :(得分:2)
您可以排除此错误的ajax / javascript位。它要么是
<button type="submit"
和<input type="submit"
的方式可能不同
醇>
您在重定向到其他页面时遇到的问题可能是由于Struts应用程序在您手动刷新新选项卡中的URL字段时收到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有一个可覆盖的功能&#39; onClick&#39;,请注意camelCasing。您正在设置DOM onclick事件。在这种情况下,在dojo.xhr触发后(当函数返回时),您可以立即通过浏览器处理click事件。请参阅此问:Preventing form submission with Dojo
然而,只有这样才能成为这种情况 - 同时你会看到“已取消”这样的情况。如果在(i)帧中加载表单,则调试窗口中的错误。否则整页将刷新,网络监控将重置。作为一种简单,双赢的解决方法,请按如下方式调整onclick属性:
<button dojoType="dijit.form.Button"
type="submit"
onClick="sendRuleForm('requestSubmitForm', 'resultDiv', 'RequestSubmit.action'); /* NOTE */ return false;">Submit</button>