teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

試してみたことを追記

2018/04/02 08:25

投稿

tacro
tacro

スコア23

title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
  どうすればこのコールバックがきちんと呼ばれるようになるか、アドバイスをお願いいたします。
22
22
 
23
23
  **【追記】s3へのアップロードが完了しないまま、ページが遷移してしまうことが原因のようです。submitボタンをクリックした際に、js側でs3へのアップロードを完了させたあとに、フォームをサーバーに提出させるには、どうすればいいでしょうか?**
24
-
24
+ →**【追記2】formのsubmitを一度中断し、アップロード完了後に再開させるという処理を思いつきました。**中断はできるのですが、再開がうまくできません。「試したこと」欄に詳述するので、アドバイスいただきたいです。
25
25
  ### 該当のソースコード
26
26
 
27
27
  ```javascript
@@ -140,52 +140,62 @@
140
140
  ```
141
141
 
142
142
  #試してみたこと
143
+ submitボタンがクリックされた際に、一度formのsubmitを中断
144
+ →画像のアップロード完了後に再開、という手段を試みました。
143
- 以下のように`console.log`書いてみましたが、コンソ表示されないため、そもそものコールバック呼ばれていないと思いす…
145
+ 以下のようにコード修正し、中断させることには成功しましたが、画像のアップロド完了後formのsubmitをう一度有効化するできていません。
146
+ 何故有効化できないのでしょうか?ご意見をいただきたいです。
144
147
 
145
148
  ```javascript
146
149
  $(function() {
150
+ ...
151
+ add: function(e, data){
152
+ ...
153
+ submitButton.on('click', function(){
154
+ //一度submitを中断させる
155
+ $('form').submit(function(){
156
+ return false;
157
+ });
158
+ // crop のデータを取得
159
+ $('#crop_img').cropper('getCroppedCanvas').toBlob(function (blob){
160
+ data.files[0] = new File([blob], data.files[0].name);
161
+ data.originalFiles[0] = data.files[0];
162
+ data.submit();
163
+ })
164
+ });
165
+ },
166
+
147
167
  ...
148
- ...
168
+
149
169
  done: function(e, data) {
150
- console.log('doneコールバックが呼ばれました!');
170
+ submitButton.prop('disabled', false);
151
- ...
171
+ progressBar.text("Uploading done");
172
+
152
173
  // extract key and generate URL from response
153
174
  var key = $(data.jqXHR.responseXML).find("Key").text();
154
175
  var url = '//' + form.data('host') + '/' + key;
155
176
 
156
177
  // create hidden field
157
- var input = $("<input />", { type:'hidden', name: fileInput.attr('name'), value: url });
178
+ var input = $("<input />", { type:'hidden', name: fileInput.attr('name'), value: url })
158
- $("#post_remote_image_url").val(url); //hidden_field内のremote_image_urlの値にURLを入れる
159
179
  form.append(input);
180
+ //submitを再開させたいが、うまくいきません
181
+ $('form').submit(function(){
182
+ return true;
183
+ });
184
+ $('.directUpload').submit();
185
+ console.log("upload done!!") //このログが表示されるため、doneコールバックはきちんと呼ばれています。
160
186
  },
187
+
188
+ fail: function(e, data) {
189
+ submitButton.prop('disabled', false);
190
+
191
+ progressBar.
192
+ css("background", "red").
193
+ text("Failed");
194
+ }
161
- ...
195
+ });
162
- ...
196
+ });
163
197
  });
164
- ```
165
198
 
166
- ```Ruby
167
- class PostsController < ApplicationController
168
- ...
169
- def new
170
- @post = Post.new
171
- end
172
-
173
- def create
174
- post = params.require(:post).permit(
175
- :user_id,
176
- :image_name,
177
- :remote_image_url,
178
- :detail
179
- )
180
- post[:image_name]= post[:remote_image_url] //image_nameの値にURLを入れる
181
- post[:remote_image_url] = "" //remote_image_urlを空白に
182
- @post = Post.new(post)
183
- if @post.save
184
- ...
185
- end
186
- end
187
- ...
188
- end
189
199
  ```
190
200
 
191
201
 

4

タイトルを修正

2018/04/02 08:25

投稿

tacro
tacro

スコア23

title CHANGED
@@ -1,1 +1,1 @@
1
- [JavaScript]jQueryコールバ呼ばれな
1
+ [Rails5]JavaScript側でプロード完了してから、createアクションに移るようにした
body CHANGED
@@ -20,7 +20,7 @@
20
20
  **デバックしてみたところ、以下のjavascriptコードの、`fileUpload`関数内の`done`コールバックが呼ばれていないようです。**
21
21
  どうすればこのコールバックがきちんと呼ばれるようになるか、アドバイスをお願いいたします。
22
22
 
23
- **【追記】s3へのアップロードが完了しないまま、ページが遷移してしまうことが原因のようです。submitボタンをクリックしたに、アップロードを完了させたあとに、フォームをサーバーに提出させるには、どうすればいいでしょうか?**
23
+ **【追記】s3へのアップロードが完了しないまま、ページが遷移してしまうことが原因のようです。submitボタンをクリックしたに、js側でs3へのアップロードを完了させたあとに、フォームをサーバーに提出させるには、どうすればいいでしょうか?**
24
24
 
25
25
  ### 該当のソースコード
26
26
 

3

問題点を追記・変更

2018/04/02 07:27

投稿

tacro
tacro

スコア23

title CHANGED
File without changes
body CHANGED
@@ -20,6 +20,8 @@
20
20
  **デバックしてみたところ、以下のjavascriptコードの、`fileUpload`関数内の`done`コールバックが呼ばれていないようです。**
21
21
  どうすればこのコールバックがきちんと呼ばれるようになるか、アドバイスをお願いいたします。
22
22
 
23
+ **【追記】s3へのアップロードが完了しないまま、ページが遷移してしまうことが原因のようです。submitボタンをクリックした時に、アップロードを完了させたあとに、フォームをサーバーに提出させるには、どうすればいいでしょうか?**
24
+
23
25
  ### 該当のソースコード
24
26
 
25
27
  ```javascript

2

コードをさらに修正

2018/04/02 07:12

投稿

tacro
tacro

スコア23

title CHANGED
File without changes
body CHANGED
@@ -122,6 +122,7 @@
122
122
  post = params.require(:post).permit(
123
123
  :user_id,
124
124
  :image_name,
125
+     :remote_image_url;
125
126
  :detail
126
127
  )
127
128
  @post = Post.new(post)

1

コードを修正

2018/04/02 06:31

投稿

tacro
tacro

スコア23

title CHANGED
File without changes
body CHANGED
@@ -76,7 +76,7 @@
76
76
  var url = '//' + form.data('host') + '/' + key;
77
77
 
78
78
  // create hidden field
79
- //あたりで、urlをimage_nameの値として渡す処理加えたい
79
+ $("#post_remote_image_url").val(url); //hidden_field内remote_image_urlの値にURL入れる
80
80
  var input = $("<input />", { type:'hidden', name: fileInput.attr('name'), value: url });
81
81
  form.append(input);
82
82
  },
@@ -95,10 +95,12 @@
95
95
  <%= f.label("アイテム画像(必須)") %>
96
96
  <%= f.file_field :image_name %>
97
97
 
98
+ <%= f.hidden_field :remote_image_url %>
99
+
98
100
  <div class="preview"><img id="crop_img" /></div>
99
101
  <div class="clear_float"></div>
100
102
 
101
- <%= f.hidden_field :designer_id, :value => current_user.id %>
103
+ <%= f.hidden_field :user_id, :value => current_user.id %>
102
104
  <div class="clear_float"></div>
103
105
 
104
106
  <%= f.label("コメント") %>
@@ -167,7 +169,7 @@
167
169
 
168
170
  def create
169
171
  post = params.require(:post).permit(
170
- :designer_id,
172
+ :user_id,
171
173
  :image_name,
172
174
  :remote_image_url,
173
175
  :detail