2012-10-25 48 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

相關問題