回答編集履歴

4

修正

2017/11/07 08:54

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -112,8 +112,6 @@
112
112
 
113
113
  var defarr = [];
114
114
 
115
- var def = new $.Deferred();
116
-
117
115
  for(var i=0;i<len;i++){
118
116
 
119
117
  defarr.push(setfile(files[i],name));

3

修正

2017/11/07 08:54

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  以下multipleで3つまで同時送信できます。
92
92
 
93
- ちょっと手を抜きましたがpromise.all的な処理をするともう少し汎用的になり
93
+ ※一部汎用的に書き直しした
94
94
 
95
95
  ```javascript
96
96
 
@@ -102,17 +102,27 @@
102
102
 
103
103
  fd.append("action","upload");
104
104
 
105
- $.when(
105
+ var files=$(this).prop('files');
106
106
 
107
- setfile($(this).prop('files')[0],$(this).attr('name')),
107
+ var len=files.length;
108
108
 
109
- setfile($(this).prop('files')[1],$(this).attr('name')),
109
+ if(len>3) len=3;
110
110
 
111
- setfile($(this).prop('files')[2],$(this).attr('name'))
111
+ var name=$(this).attr('name');
112
112
 
113
- ).done(function(data){
113
+ var defarr = [];
114
114
 
115
+ var def = new $.Deferred();
116
+
117
+ for(var i=0;i<len;i++){
118
+
119
+ defarr.push(setfile(files[i],name));
120
+
121
+ };
122
+
123
+ $.when.apply(null,defarr).done(function(){
124
+
115
- $.ajax({
125
+ $.ajax({
116
126
 
117
127
  "url":"send.php",
118
128
 

2

追記

2017/11/07 08:52

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  "url":"send.php",
28
28
 
29
- "type":"post",
29
+ "type":"post",https://teratail.com/questions/editreply/153633
30
30
 
31
31
  "data":fd,
32
32
 
@@ -83,3 +83,93 @@
83
83
  ?>
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ # 追記
90
+
91
+ 以下multipleで3つまで同時送信できます。
92
+
93
+ ちょっと手を抜きましたがpromise.all的な処理をするともう少し汎用的になります
94
+
95
+ ```javascript
96
+
97
+ $(function() {
98
+
99
+ $('input[type=file]').on('change',function(){
100
+
101
+ var fd = new FormData();
102
+
103
+ fd.append("action","upload");
104
+
105
+ $.when(
106
+
107
+ setfile($(this).prop('files')[0],$(this).attr('name')),
108
+
109
+ setfile($(this).prop('files')[1],$(this).attr('name')),
110
+
111
+ setfile($(this).prop('files')[2],$(this).attr('name'))
112
+
113
+ ).done(function(data){
114
+
115
+ $.ajax({
116
+
117
+ "url":"send.php",
118
+
119
+ "type":"post",
120
+
121
+ "data":fd,
122
+
123
+ "cache":false,
124
+
125
+ "processData": false,
126
+
127
+ "contentType": false,
128
+
129
+ }).done(function(data){
130
+
131
+ console.log(data);
132
+
133
+ });
134
+
135
+ });
136
+
137
+ function setfile(file,name){
138
+
139
+ var def=$.Deferred();
140
+
141
+ if(!file) return def.resolve();
142
+
143
+ var fr = new FileReader();
144
+
145
+ fr.addEventListener("load", function(e){
146
+
147
+ fd.append(name, new Blob([e.target.result],{"type":file.type}),file.name );
148
+
149
+ return def.resolve();
150
+
151
+ });
152
+
153
+ fr.readAsArrayBuffer(file);
154
+
155
+ return def.promise();
156
+
157
+ }
158
+
159
+ });
160
+
161
+ });
162
+
163
+ ```
164
+
165
+ ```HTML
166
+
167
+ <form method="post" action="send.php" enctype="multipart/form-data">
168
+
169
+ <input type="file" name="myimg[]" accept="image/*" multiple><br>
170
+
171
+ <input type="submit" value="go"><br>
172
+
173
+ </form>
174
+
175
+ ```

1

調整

2017/11/07 08:18

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -14,13 +14,13 @@
14
14
 
15
15
  var file=$(this).prop('files')[0];
16
16
 
17
- var me=$(this);
17
+ var name=$(this).attr('name');
18
18
 
19
19
  var fr = new FileReader();
20
20
 
21
21
  fr.addEventListener("load", function(e){
22
22
 
23
- fd.append(me.attr('name'), new Blob([e.target.result],{"type":file.type}),file.name );
23
+ fd.append(name, new Blob([e.target.result],{"type":file.type}),file.name );
24
24
 
25
25
  $.ajax({
26
26