Я хотел бы вызвать форму как всплывающее окно (форма с некоторыми полями ввода и кнопкой отправки), а затем прочитать выбранные пользователем результаты сеанса.Проблема заключается в том, что смешивание кода JS (всплывающее окно) с кодом CF (на стороне сервера), как и ожидалось, заставляет процесс вывести переменную сеанса до того, как процесс обновит ее.Для лучшего понимания ниже приводится сценарий вместе с некоторыми соответствующими фрагментами кода:
Сценарий:
1. User calls ShowForm(..)
2. ShowForm(..) displays a pop-up window and waits for the user
to submit his selection
3. The result gets stored in the session
4. The function returns the user-submitted result
form.cfc
<cffunction name="ShowForm" access="public" output="true" returntype="string">
<script>
window.showModalDialog('formpage.cfm',null,"dialogHeight=400px,dialogLeft=150px");
</script>
<cfreturn session.form_result> <!--- @toFix: The return of form_result is happening before the actual form_result is set. --->
</cffunction>
formpage.cfm
<cfajaxproxy cfc="components.sess_mgr" jsclassname="JSMaskProxy">
<script>
function submitSelection(formObj)
{
for (i=0; i<intSelValue.length; i++)
result.push(intSelValue[i]);
var instCfProxy = new JSMaskProxy();
instCfProxy.setToSession(result); // updates session.form_result
//window.returnValue=result;
window.close();
}
</script>
<form name="frmDtls">
<td align="center"><input type="button" id="selectButton" name="selectButton" onClick="submitSelection(details);">
</form>
Что вы думаете об этом?Как решить эту проблему?
Функция ColdFusion.navigate (..) может иметь функцию обратного вызова и обработчик ошибок, но дело в том, что функция обратного вызова может быть только функцией на стороне клиента.Если бы эта функция могла быть функцией CF или страницей на стороне сервера, я думаю, что это решило бы эту проблему зависимости.
Что-то побочное, в идеале я хотел бы прочитать значение из window.showModalDialog, а не читатьэто из сессии, но это всего лишь набросок, и главное здесь - как преодолеть эту смешанную проблему JS-CF.