質問: new FormData(); fd.append('content', blob); $.ajax({ url: "/users/" + gon.user_id + "/indices/" + gon.index_id + "/uploadtoaws", type: "post", data: fd, processData: false, contentType: false, datatype: "text", success: function(data,jqXHR){ console.log(jqXHR); }, error: function(jqXHR, textStatus, errorThrown){ alert(textStatus); alert(errorThrown.message); alert(jqXHR.status); alert(jqXHR.responseText); }, }); }); ``` これで明示的なalertは出ないものの通信が`url`に渡っていない。chromeの開発ルール、networkを見ると`status`がcancelされ`provisional headers are shown`が表示されていました。 ググって調べた、 1. cacheを消す 2. クロスオリジン(CORS)を設定する を順に試してcacheが原因ではないようです。2.のクロスオリジンを設定したいのですがやり方がよく分かりません。 ぐぐっても私レベルで理解できるサイトはありませんでした。 どのファイルにどう設定すればよいかアドバイス頂けると嬉しいです。 ruby: 2.3.1 rails: 4.2.10
回答: 自己解決しました。 渡すfdを小さくして(例えば"test"とか数文字列)試したところ、正常に通信していることがわかりました。 どうもfromdataの容量が大きすぎてurlに渡しきる前にlink_toのurlに飛んでしまって通信がキャンセルされていたようです。10回に1度くらいはS3にデータ保存されていたのでたまたまキャンセルされなかっただけなんでしょうね、疑問が解けました。ruby on railsアプリの中での通信なのでクロスオリジンを疑う必要はなかったのにそっちに入って嵌ってしまいました。 link_toの代わりにinputタグでajax起動してsuccess後に`location.href = [rails.route]`でおk 通信時間だけ待たないといけないですが仕方ないです。