У меня есть 2 фрейма на странице, где frame1 вызывает метод Javascript на frame2. В frame2 мы делаем отправку, которая не происходит. Когда мы возвращаемся к frame1, он сам отправляет данные, и это прекрасно работает. Оба представления отправляют данные на сервер.
FRAME1.HTM
function doSubmit(selectedTab)
{
if (checkFieldsChanged() == true)
{
...
if(selectedTab >= 0)
document.forms[0].action="WebDesk?op=dm&id=11097DETH000000&FormNo=" + selectedTab;
document.forms[0].submit();
}
}
function checkFieldsChanged()
{
...
if (confirm("Do you want to save the changes you have made?"))
{
// try to submit the form.
try
{
return parent.frames[1].doSubmit();
}
catch (e)
{
...
}
}
return true;
}
...
<FORM METHOD="POST" ACTION="WebDesk?op=dm&id=11097DETH000000&FormNo=" TARGET="WorkitemContents11097DETH000000">
FRAME2.HTM
function doSubmit()
{
...
**// Nothing happens here on this submit
document.forms[0].submit();**
return true;
}
...
<form METHOD='POST' ACTION='WebDesk?' onsubmit="return ReqdFieldChk();">
<input TYPE='hidden' NAME='op' VALUE='f'/>
<input TYPE='hidden' NAME='id' VALUE='11097DETH000000'/>
<input TYPE='hidden' id='FormNo' NAME='FormNo' VALUE='3'/>
<input TYPE='hidden' id='send' NAME='send' VALUE='false'/>
Таким образом, doSubmit FRAME1 вызывается обработчиком onclick, который вызывает checkFieldsChanged, который выполняет doSubmit для FRAME2. Когда мы вызываем submit в FRAME2, ничего не происходит. Затем, когда мы возвращаемся к FRAME1, происходит отправка, и это всегда работает нормально.
Я подозреваю, что объединение этих двух отправок для одного пользовательского действия недопустимо. Или IE8 это не нравится и не позволяет.
Я сделал много отладок:
- Это правильно работает в IE6 на XP.
- Я знаю, что процедура отправки действительно вызывается, потому что я помещаю вызовы console.log вокруг нее, и она всегда называется
- Если я установлю точку останова на строке отправки внутри отладчика IE и нажму F10, чтобы перешагнуть через строку, отправка сработает. Однако, если я нажму F5, чтобы просто продолжить оставшуюся часть сценария, это не сработает. Таким образом, это может показаться, что проблема синхронизации
- Я ввел асинхронный вызов, чтобы выполнить отправку позже, но это не помогло
- FRAME2.HTM генерируется встроенным кодом и имеет некоторые проблемы с проверкой HTML. Я исправил это, и проблема все еще остается
- В Firefox 3.6.8 иногда это работает, иногда нет. Я не понял, когда это работает, а когда нет.
- Я запустил программу HTTP Analyzer, которая просматривает выходные данные IE и ничего не показывает из неверной отправки. Он показывает правильный вывод для 2-й отправки, которая работает. Когда я делаю F10, чтобы перешагнуть через отправку (и она работает правильно), ответ, который возвращается с сервера, усекается. Ответ от 2-го представления (который также работает) является нормальным. На самом деле вы не заметите здесь ничего плохого, потому что 2-я отправка заменяет FRAME2, так что это не проблема. Но это может быть признаком того, что первая отправка усекается.
- Я пробовал просмотр совместимости, но это не помогло
- Я провел множество поисков в Google и не нашел ничего конкретного.
Я могу предоставить необработанный HTML, но я не хочу добавлять больше к этому и без того большому вопросу.
Это действительно сводится к следующему: можем ли мы объединить несколько отправок в одно действие пользователя? В течение многих лет он отлично работал на IE6, но теперь работает на IE8.