jQueryには、このような有名なフォームプラグインがあります。 フォームを非同期で送信するのに最適だと思います。
しかし、Opera 10で非同期にファイルを送信する場合、操作不能のため使用を放棄しなければなりませんでした。私の9番目のOperaではすべてがうまくいきました。
問題は普通ではありません。特定のサイズのファイル(最大80〜90kb)が正常にロードされます。 ただし、ファイルが大きい場合、コールバック関数(
success 、
error )はトリガーされません。 この場合、ファイルはサーバーに正しくアップロードされますが、この瞬間はブラウザーからキャッチできなくなります。 IE、FireFox、Chromeでは、このような問題はありません。
2月19日に、プラグインの最新バージョンがリリースされ、
Operaのiframeに関する何らかの問題が修正されましたが、これは役に立ちませんでした。
インターネットで解決策を見つけたことがなく、自分で解決しました。 すべてがシンプルであることが判明しました。
jquery.form.jsファイルで「opera」という単語で
検索し、次のように取得します。
var domCheckCount = 50 ;
.....
if (--domCheckCount) {
// in some browsers ( Opera ) the iframe DOM is not always traversable when
// the onload callback fires, so we loop a bit to accommodate
cbInvoked = 0;
setTimeout(cb, 100);
return;
}
log('Could not access iframe DOM after 50 tries.');
return;
Operaは一度にiframeにアクセスする時間がないため、これをループで実行しようとしています。 50回は明らかに十分ではありません。 大きな桁に変更し
ても問題はありません (実際、すべてはファイルサイズに依存します)。
しかし、別のことは興味深いです。 この問題は、プラグインの最新バージョンまで解決されません。
そして、ダウンロードしたファイルの特定のサイズでのみ出現する場合、とにかく、パフォーマンスの問題があると推測できます。そのため、尊敬されるプラグインの作成者である
マルサップはスキップでき
ます 。
PSサイクルを無限に作り直すことができますが、このアクションの結果がどうなるかはわかりません。
domCheckCount = 200に設定し、これについてプラグイン作成者に書きました。
UPD:プラグインの作成者は私のリクエストで
この問題を
修正しましたUPD: プラグインの新しいバージョンがリリースされましたUPD:これまでのところ、問題は著者によって受動的に解決されています(変数
domCheckCount = 100の値では
不十分な場合があります)。このため、私はそれをJQueryブログに転送します。
記事のソースはここにあります。