關(guān)于原頁(yè)面與彈出頁(yè)面之間進(jìn)行交互的問(wèn)題的設(shè)計(jì)
web開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到原頁(yè)面與彈出頁(yè)面之間進(jìn)行交互的問(wèn)題,如果只是簡(jiǎn)單的變量傳遞,還是不難的,而我們經(jīng)常遇到的一個(gè)實(shí)際場(chǎng)景是:例如有一個(gè)用戶(hù)列表頁(yè)面,點(diǎn)擊“新建”按鈕,彈出一個(gè)創(chuàng)建用戶(hù)的頁(yè)面,填寫(xiě)完信息后要提交表單并關(guān)閉窗口,同時(shí)列表頁(yè)面中要列出新建的用戶(hù),這個(gè)時(shí)候我們一些開(kāi)發(fā)人員喜歡使用的方式為:userForm.submit();
opener.location.reload();//或者有些開(kāi)發(fā)人員喜歡用opener.location=列表頁(yè)面的請(qǐng)求url
window.close();
上面的代碼有一個(gè)很明顯的問(wèn)題,就是如果表單提交給后臺(tái),后臺(tái)還在處理,而此時(shí)原頁(yè)面已經(jīng)執(zhí)行了重載,那么等新用戶(hù)在后臺(tái)存儲(chǔ)后了,也不會(huì)反映到列表頁(yè)面中了,當(dāng)然刷新一個(gè)就有了,但是就達(dá)不到我們所要的效果了。下面給你介紹一種比較穩(wěn)妥的方式(ajax方式就不介紹了):
先讓表單提交,提交后還是回到彈出的那個(gè)頁(yè)面,或者一個(gè)其它的頁(yè)面,然后在該頁(yè)面中做判斷,如果后臺(tái)信息處理成功,那么就執(zhí)行原頁(yè)面的重載,然后關(guān)閉窗口。
當(dāng)然有些開(kāi)發(fā)人員說(shuō),前面的那種方式,一直在項(xiàng)目中使用沒(méi)有發(fā)現(xiàn)什么問(wèn)題,那我告訴你,那是因?yàn)槟惚容^幸運(yùn),后臺(tái)處理速度很快,列表重載的時(shí)候,后臺(tái)已經(jīng)處理完了,但是一旦后臺(tái)處理慢了,客戶(hù)就該找麻煩了。
所以常用的設(shè)計(jì)是:
1。
原來(lái)界面中加入
if(showModalDialog(彈出的新的界面))
{
原來(lái)界面的query()
}
2。
新的彈出的界面中加入
function init()
{
if(提交成功)
{
windows.retrunValue=true;
return;
}
}
對(duì)于讀取后臺(tái)的處理還是提交后還是回到彈出的那個(gè)頁(yè)面
posted on 2007-10-15 17:32 劉錚 閱讀(344) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): JSP and Servlet