Jquery AjaxForm возвращает False в OPERA по протоколу https - PullRequest
0 голосов
/ 18 июня 2010

Ошибка отображается только при добавлении ввода файла. Я получаю возврат ЛОЖЬ в случае успеха. бывает только в опере.

Есть идеи, где может быть проблема?

http://jquery.malsup.com/form/

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

jQuery создает скрытое IFRAME для отправки формы, поскольку это единственный способ обработать загрузку файла AJAXy-способом.

Основная причина проблемы заключается в том, что Opera запускает загрузку, когда в документ вставляется пустой iframe. Сценарий jQuery не ожидает этого начального события загрузки, считает, что отправка формы завершена, и приходит к выводу, что она не удалась. Причина, по которой это не так легко происходит в http, по-видимому, связана с тем, что временные рамки различаются, когда Opera должна зашифровать полезную нагрузку при загрузке файла.

Если тот же сценарий, который вставляет IFRAME, также инициирует загрузку документа в IFRAME, другие браузеры будут ожидать окончания загрузки документа и запускают только одно событие загрузки. (Или что-то в этом роде - в данном конкретном случае скрипт, который запускает загрузку документа, запускается по таймауту, так что это даже не тот же сценарий).

Мое предлагаемое исправление будет заключаться в улучшении попытки обхода проблемы, которая уже существует для этой проблемы:

if (!isXml && (doc.body == null || doc.body.innerHTML == ''  )) 

и отметьте в этом операторе if, является ли URL документа внутри IFRAME все еще исходным javascript: false:

if (!isXml && (doc.body == null || doc.body.innerHTML == '' || doc.URL=='javascript:false' )) 

Этого должно быть достаточно, чтобы убедиться, что jQuery ожидает загрузки нового документа.

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

Для меня проблема выглядит решенной с переходом на jQuery 1.5 и последний плагин jQuery Form (2.63)

...