Форма отправки в целевой iframe работает только один раз - PullRequest
0 голосов
/ 23 апреля 2010

У меня действительно раздражающая проблема, когда я делаю что-то, что, я уверен, я делал раньше. Настройка такова:

  • Существует форма, которая отправляется с помощью обработчика "нажатия" на кнопку, хотя в конечном итоге отправка представляет собой простой вызов собственной функции submit() формы.
  • Целью формы является iframe, который изначально заполнен пустой страницей (то есть его исходный объект является URL-адресом для пустой страницы). То есть атрибут «target» формы имеет тот же идентификатор (и да, это действительный идентификатор), что и атрибуты «name» и «id» в iframe (и да, он уникален)

Теперь цель этой настройки следующая: форма содержит поля загрузки файла. Если что-то не так с одним из загруженных файлов, сервер сообщит об ошибке. Если для ответа об ошибке (то есть html-страницы с новой копией формы вместе с соответствующими сообщениями об ошибках) было разрешено перезагрузить исходное окно, то поля ввода файла будут очищены. Это не хорошо.

Таким образом, форма отправляется в iframe, поэтому ответом от сервера может быть небольшая страница, которая знает, что находится в этом скрытом iframe, и знает, как переместить сообщения об ошибках в форму.

Еще одна вещь: сама форма также находится в iframe, как часть всплывающего модального диалога (подобно диалоговому окну jQuery UI, только немного отличается; хотя та же идея).

Настройка работает нормально - при первой отправке. Другими словами, если я предоставлю хорошие счастливые файлы для загрузки, сервер вернет успешный ответ, и диалоговое окно закроется правильно. Если я отправляю фиктивный файл, сервер отвечает страницей с ошибкой, которая корректно копирует его содержимое на страницу формы.

Однако при втором отправлении (например, если я исправлю поле ввода фиктивного файла) браузер настаивает на отправке ответа сервера на новую вкладку браузера. Насколько я могу судить, "target" формы остается верным, атрибуты iframe "name" и "id" не меняются, и я даже проверяю, обновлены ли скрытые iframe "window.name" и "window.id" " ценности. Ничто из этого не помогает; Я всегда получаю новую вкладку браузера.

Я пытаюсь настроить немного более простой тестовый пример, чтобы посмотреть, смогу ли я исключить некоторые из моего фреймворк-кода (материал, который выполняет отправку), хотя через несколько вызовов console.log () я думай что все в порядке; это, конечно, нормально на всех других диалогах и т.д. на сайте. Когда / если я создам более простую версию, я опубликую ее. В то же время, если кто-нибудь из вас, безумно умных людей, узнает эту ситуацию и узнает, как заставить ее работать, я был бы очень благодарен.

Я вижу одинаковое поведение как в Firefox (3.6), так и в Chrome, так что это должно быть моей проблемой, а не причудой браузера (ну, по крайней мере, я так думаю).

Ответы [ 2 ]

3 голосов
/ 24 апреля 2010

Ну, как-то мой вторичный "целевой" iframe, похоже, теряет свой атрибут "name", хотя я не знаю, как и когда это произойдет. Сам элемент <iframe> по-прежнему имеет правильное имя, а внутри «оконного» объекта - нет, хотя код пытается его установить.

Теперь я могу разобраться со странностями, выполнив эту проверку кода «submit» для целевой формы, найдя целевой iframe, а затем убедившись, что его contentWindow имеет значение «name», соответствующее «name» атрибут в фрейме. Как / почему я должен это делать, я не знаю, и я уверен, что из-за чего-то другого я поступаю неправильно.

1 голос
/ 28 февраля 2011

Возникла та же проблема, но действие формы было другим доменом (страница, выполняющая отправку, является локальным HTML-файлом), поэтому установка свойства contentWindow.name недопустима. Мне удалось обойти эту проблему, удалив iframe из документа и сделав новый iframe с правильным именем, прежде чем снова отправлять форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...