用Form+iFrame
<iframe id="if" class="fr" name="fr"></iframe> <form target="fr" action="/Home/test"> <input type="submit" class="submit" value="Start" onclick="return sub()"/> </form> <script> //獲取iframe對象 var iframe = document.getElementById("if"); var flag = 0; //JS綁定事件 //el:表示選中的dom元素 //type:事件名稱 //fn:事件處理器 function addEvent(el, type, fn) { if (el.addEventListener) { //絕大多數非IE內核瀏覽器 el.addEventListener(type, fn, false); } else if (el.attachEvent) { //IE內核 el.attachEvent('on' + type, function () { fn.call(el); }); } else { //選擇dom元素錯誤 throw new Error('不支持該dom元素'); } } addEvent(iframe, 'load', function () { if (flag != 0) { alert("執行完畢!"); //事件這里處理完就把flag變成0 flag = 0; } }); function sub() { //如果flag為0,說明是剛進來沒有請求過。 //然后把它變成1 //說明我已經在請求了 //通知事件那邊准備處理 if (flag == 0) { flag = 1; } return true; } </script>
關於標志位:
也可以利用服務器返回值來判斷。事件處理器中,判斷iframe中是否有服務器返回值,沒有說明是剛進來,沒有請求過。有的話就表示是因為請求而觸發的onload事件。事件處理器處理完之后,再把iframe清空。就是這樣。本質上跟第一種是一樣的。