web開發過程中,經常會遇到原頁面與彈出頁面之間進行交互的問題,如果只是簡單的變量傳遞,還是不難的,而我們經常遇到的一個實際場景是:例如有一個用戶列表頁面,點擊“新建”按鈕,彈出一個創建用戶的頁面,填寫完信息后要提交表單并關閉窗口,同時列表頁面中要列出新建的用戶,這個時候我們一些開發人員喜歡使用的方式為:
userForm.submit();
opener.location.reload();//或者有些開發人員喜歡用opener.location=列表頁面的請求url
window.close();
上面的代碼有一個很明顯的問題,就是如果表單提交給后臺,后臺還在處理,而此時原頁面已經執行了重載,那么等新用戶在后臺存儲后了,也不會反映到列表頁面中了,當然刷新一個就有了,但是就達不到我們所要的效果了。下面給你介紹一種比較穩妥的方式(ajax方式就不介紹了):
先讓表單提交,提交后還是回到彈出的那個頁面,或者一個其它的頁面,然后在該頁面中做判斷,如果后臺信息處理成功,那么就執行原頁面的重載,然后關閉窗口。
當然有些開發人員說,前面的那種方式,一直在項目中使用沒有發現什么問題,那我告訴你,那是因為你比較幸運,后臺處理速度很快,列表重載的時候,后臺已經處理完了,但是一旦后臺處理慢了,客戶就該找麻煩了。
所以常用的設計是:
1。
原來界面中加入
if(showModalDialog(彈出的新的界面))
{
原來界面的query()
}
2。
新的彈出的界面中加入
function init()
{
if(提交成功)
{
windows.retrunValue=true;
return;
}
}
對于讀取后臺的處理還是提交后還是回到彈出的那個頁面