2012-08-30 54 views
1

有人可以請建議,我試圖找出整整一週,但仍然沒有運氣。Tripple HTTP請求被髮送到服務器,當點擊一個鏈接

我的問題是網絡應用程序。當用戶點擊一個鏈接時,點擊特定鏈接(其他鏈接正常),IE8瀏覽器向服務器發送三個HTTP請求。它假設只發送一個請求。

1 HTTP請求是POST - 標題和正文數據是正確的(所有參數好看)

第二個HTTP請求是POST - 標題和正文數據是正確的(所有參數好看)

第三HTTP請求是GET - 沒有Referer在標題中,沒有任何內容(因爲它是GET)。

第三個請求導致Servlet拋出NULL指針excite,因爲servlet試圖讀取FORM參數。

所有請求都發送到同一個Servlet。 這三個請求在1 - 2秒內發生。我確定這不是多次點擊。

用戶正在使用IE8 With Window XP。 這是無法在我的環境中重現。

我身邊有互聯網研究了一個星期,我注意到一個已知問題IE8將創建服務器的雙要求,這種情況下,似乎是關於「.submit()」中的JavaScript。我非常詳細地研究了我的代碼,我相信事實並非如此。

這裏是鏈接的樣子。請建議。

<a href=\"#\" onClick=\"test.goToNextPage();return false;\">Test link</a> 


this.goToNextPage = function() 
{ 
// do some paramter manipulation here (such as customer data), 
    //not related to this issue 
createForm().submit(); 

} 

function createForm() 
{ 

bcForm = document.createElement("form"); 
bcForm.setAttribute("method", "POST"); 

//real code add some hidden parameter(e.g. action, Form ID) and value here... 

document.body.appendChild(bcForm); 

return bcForm; 
} 
+1

爲什麼用JS打造的形式,並用鏈接提交?爲什麼不在標記中使用表單,我們JS要填充隱藏的字段(如有必要),並使用真正的提交按鈕? –

回答

0

我面臨同樣的問題。這是關於在嵌套的HTML元素上傳播onclick事件的。例如:如果你有一個<一的onclick = 「」 >一個< TD的onclick =裏面 「」 >,你只是<點擊>那麼這兩個onclicks被執行。

這種現象被稱爲「事件冒泡」,你可以用JavaScript來解決這種情況。下面的函數停止onclick事件的傳播:

function crossbrowser_stopPropagation(e){ 
    if (!e) { 
     e = window.event; 
    } 

    e.cancelBubble = true;  

    if (e.stopPropagation) { 
     e.stopPropagation(); 
    }  
} 

現在,你必須調用此功能在您的onclicks,像這樣:

<a href="#" onClick="crossbrowser_stopPropagation(event);test.goToNextPage();return false;">Test link</a> 

如果您<一個>標籤是另一個HTML裏面實現onclick事件的標記,請記住在該標記中也使用該函數。

檢查此鏈接瞭解更多信息:http://forums.mozillazine.org/viewtopic.php?f=38&t=549571

+0

嗨查菲,謝謝你看看這個,並提供答案,這是非常有用的信息,例如非常好。但是,我只是使用Firebug來查看頁面元素層次結構,不幸的是在外部HTML元素上沒有任何其他「onClick」:( – user1637151

+0

)如果您用按鈕標記替換A標記(未提交),您是否遇到同樣的問題? ?如果是這樣,也許問題在於你的JS。 – Chafi

+0

這不能在我的環境中重現:( – user1637151

相關問題