是否可以在表單的onsubmit()中發送ajax請求?我一直在嘗試,結果很差,主要是因爲如果瀏覽器發送我的請求比發送原始表單需要更長時間,那麼一旦加載頁面的位置發生變化,我的請求就會被丟棄,所以有時候從來沒有碰到服務器。在表單提交之前發送Ajax請求
基本上,我想要做的是添加一個收集登錄事件的審計日誌收集器,我想用最少的入侵將其掛接到現有的應用程序。
是否可以在表單的onsubmit()中發送ajax請求?我一直在嘗試,結果很差,主要是因爲如果瀏覽器發送我的請求比發送原始表單需要更長時間,那麼一旦加載頁面的位置發生變化,我的請求就會被丟棄,所以有時候從來沒有碰到服務器。在表單提交之前發送Ajax請求
基本上,我想要做的是添加一個收集登錄事件的審計日誌收集器,我想用最少的入侵將其掛接到現有的應用程序。
這很容易實現。只需暫停表單提交,直到AJAX請求完成。
使您的表格onsubmit
屬性調用AJAX函數並返回false(取消表單提交)。當你的AJAX調用完成時,以編程方式提交表單。
例如:
<form name="myform" onsubmit="javascript: startAjax(); return false;">
...
<script type="text/javascript">
function startAjax() {} // Calls ajaxComplete() when finished
function ajaxComplete()
{
document.myform.submit();
}
</script>
如果我在發送Ajax請求後立即對Ajax請求的結果不感興趣並想要提交表單,該怎麼辦?我仍然可以使用這種方法,並在'startAjax()'函數本身中進行明確的表單提交嗎? – 2013-12-24 18:32:03
不會進入循環嗎? – 2017-03-14 14:32:51
還有另一種方式來解決這個問題,那就是你可以在Ajax調用的同步。
例子:
xmlhttp.open("GET", imageUrlClickStream, false);
通過這一點,我們可以確保表單提交會等到Ajax調用得到的迴應。
雖然這可能有效,但這是一個非常糟糕的做法。執行同步請求會凍結頁面執行,因爲瀏覽器必須等待響應才能繼續執行任何其他JavaScript代碼。 – HoLyVieR 2012-10-01 13:51:22
用onclick替換onslick,對我來說很好,因爲onsubmit會進入循環。
<form name="myform" onclick="javascript: startAjax(); return false;">
...
<script type="text/javascript">
function startAjax() {} // Calls ajaxComplete() when finished
function ajaxComplete()
{
document.myform.submit();
}
</script>
如果您爲AJAX請求使用特定的JavaScript框架,請告訴我,我可以給您一個更具體的答案。 – 2009-08-11 23:35:09