勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

FormDataを使ったAjax通信がiPhoneのみエラー

   

FormDataオブジェクトを使用したAjax通信するシステムがあり、PCやAndroid端末では送信できるものの、iPhoneのみ特定ケースでエラーが発生した。以下に症状と対応策をメモ。

 

症状

このサンプルページで作ったようなFormDataオブジェクトとAjax通信の組み合わせで、iPhoneのみ画像を選択しておかないとエラー(fail側)と判定されてしまう。画像を選択すれば送信できる。

ただこれは以前は動いていたように思う。というのも仕事で似たようなソースで書いており、その際にテストしているので動いたはず。

 

エラーの原因

textStatusを出力させると400エラーになっていた。不正な要求もしくは要求の形式が正しくないらしい。FormDataを使わずに1つずつ$('.hoge').val()みたいに取得する形にするか、もしくはajaxではなく普通にsubmitさせれば改善しそうだけどそれは手間がかかる。

次にFormDataの中身を確認してみたところ、iPhoneのみ画像を選択していなくても、なぜかオブジェクトが格納されていた。これが原因っぽい。

 

対応策

iPhoneのみ画像が選択されていない場合はFormDataオブジェクト内から画像のデータを削除する、ということで送信前に以下を追記。

 

まとめ

FormDataをAjaxで送信する場合にiPhoneのみエラーが発生する場合はファイル関連の送信データ部分を疑う。ファイルを選択していないのに、送信データに入っている場合は削除することで改善される。

 - jQuery

  関連記事

1422186794_sqliteicon
PHPとSQLiteでi-mobileのデータをグラフ化

i-mobileでクリック保証のアフィリエイトだけど数値が並んでいるだけでグラフ ...

jquery_logo
アコーディオンメニュー

簡単にアコーディオンメニューを導入したい時に 便利に使えたプラグイン。 ■サンプ ...

jquery_logo
javascriptやjQueryで画像を書き換えても変わらない場合

けっこう前に画像をアップロードしてリアルタイムに プレビューする機能を作った時に ...

jquery_logo
スクロールしてもついてくる追尾型の広告を作る方法

スマホサイトとかでよく見る、スクロールしてもページ下部とかに常時表示されている追 ...

jquery_logo
jQueryで偶数or奇数行にclassを付与

やりたかった事は、 ・PHPは使えなくてjavascriptかjQueryを使用 ...

jquery_logo
画像をサムネイル⇔クリックで拡大(lightbox)

画像をサムネイル表示してクリックしたら大きく表示する というのがlightbox ...

images
要素の表示or非表示

今まで要素の表示or非表示をCSSで操作する際、 display:none; / ...

jquery_logo
jQueryで後から追加された要素にイベントを設定

jQueryで.html()等を使って追加した要素に対してイベントを設定したかっ ...

jquery_logo
フォームのpasswordとtextをjQueryで切り替えて

パスワード入力の際、大抵「●●●」みたいな形で隠されるが、 jQueryでそれを ...

jquery_logo
lightboxで画像拡大時に文字タイトルとリンクをつける

lightboxで画像をクリックして拡大した際に、文字タイトルとその文字にリンク ...