У меня действительно раздражающая проблема, когда я делаю что-то, что, я уверен, я делал раньше. Настройка такова:
- Существует форма, которая отправляется с помощью обработчика "нажатия" на кнопку, хотя в конечном итоге отправка представляет собой простой вызов собственной функции
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, так что это должно быть моей проблемой, а не причудой браузера (ну, по крайней мере, я так думаю).