2012-10-25 44 views
0

我遇到了一个我继承的Struts2 + dojo web应用程序的问题。该应用程序在IE9和Firefox中运行,但在Chrome中不起作用。在Java代码完成之前,Dojo ajax调用返回?

这里提交按钮代码:

<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开发者工具指示取消

我使用道场1.3.1的旧版本,但它更新到最新版本并没有解决问题的行动/请求(What does status=canceled for a resource mean in Chrome Developer Tools?)状态。

任何人都可以解释这种行为,让我知道我可以去解决这个问题吗?

+0

如果打开的标签要求发生了什么? – mschr

+0

@mschr不确定你的意思。你能澄清一下吗? – nmc

+0

右键单击开发人员工具中的status = cancelled行,选择'在新标签中打开链接' – mschr

回答

2

你可以排除这个错误的ajax/javascript位。它要么

  1. 在浏览器的错误(不太可能)
  2. 支柱中的页面您选择打电话,可以发回一个奇怪的HTTP响应中的错误(检查服务器日志)
  3. 存在形式是一个“抖动”提交,发送多个请求。即时猜测,但也许<button type="submit"<input type="submit"在镀铬的处理方式不同

您选择在重定向到不同的页面经历了可能是由于该Struts应用程序接收到一个GET当你手动刷新URL字段的事实新标签。也可能是由于缺少登录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事件。在这种情况下,您点击事件可能会在dojo.xhr触发后立即被浏览器处理(函数返回时)。看到这个问: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> 
+0

将'return false;'添加到onClick代码中解决了我的问题。感谢彻底的答复。 – nmc

+0

欢呼:)首先丢掉我,bcuz表单提交按钮重新加载页面,并通常重置开发者网络标签内容 – mschr

相关问题