質問編集履歴

2

ソースコード修正

2020/10/29 12:28

投稿

TakeruYamamura
TakeruYamamura

スコア7

test CHANGED
File without changes
test CHANGED
@@ -70,353 +70,81 @@
70
70
 
71
71
  ```javascript
72
72
 
73
- var Search_NomalCampaign_Products = function() {
73
+ this.Search_Product_API = function(param_nomal, product_type_str){
74
+
75
+ // 親クラスのインスタンスを生成
76
+
77
+ var oya_class = this;
74
78
 
75
79
 
76
80
 
77
- // 検索結果を格納するリストを生成(通常商品)
81
+ // APIで通常商品の在庫状況を検索リストに格納
78
82
 
79
- this.nomal_zaiko_list = [];
83
+ return new Promise(function(resolve, reject){
80
84
 
85
+ $.ajax({
81
86
 
87
+ url: 'APIのURL',
82
88
 
83
- // 検索結果を格納するリストを生成(キャンペーン商品)
89
+ data: param_nomal,
84
90
 
85
- this.campaign_zaiko_list = [];
91
+ dataType: 'jsonp',
86
92
 
93
+ success: function(data){
87
94
 
95
+ // 検索結果をリストに格納
88
96
 
89
- // セットの在庫判定結果のリストを作成
97
+ for (var i = 0; i < data.length; i++) {
90
98
 
99
+ // 検索結果を変数に格納
100
+
91
- this.gift_set_hantei_list = [];
101
+ var shohin_cd = data[i].shohin_cd;
102
+
103
+ var zaiko_kbn = data[i].zaiko_kbn;
92
104
 
93
105
 
94
106
 
95
- // 通常商品を検索する関数
107
+ // 検索結果をjsonに格納
96
108
 
97
- this.Nomal_Products_Search = function(){
109
+ var result_json = {
98
110
 
99
- // products.jsから商品情報を取得
111
+ "shohin_cd": shohin_cd,
100
112
 
101
- var nomal_params_list = Nomal_Products_json();
113
+ "zaiko_kbn": zaiko_kbn
102
114
 
103
-
104
-
105
- // 親クラスのインスタンスを生成
106
-
107
- var oya_class = this;
108
-
109
-
110
-
111
- // 商品検索APIに送るパラメータを設定(商品区分は通常商品)
112
-
113
- var param_nomal = 'border=20&shohin_kbn=1';
114
-
115
- for (var i = 0; i < nomal_params_list.length; i++) {
116
-
117
- param_nomal = param_nomal + '&shohin_cd=' + nomal_params_list[i].shohin_cd;
118
-
119
- };
120
-
121
-
122
-
123
- oya_class.product_search_api(param_nomal).done(function (data) {
124
-
125
- // 検索結果をリストに格納
126
-
127
- for (var i = 0; i < data.length; i++) {
128
-
129
- // 検索結果を変数に格納
130
-
131
- var shohin_cd = data[i].shohin_cd;
132
-
133
- var zaiko_kbn = data[i].zaiko_kbn;
134
-
135
-
136
-
137
- // 検索結果をjsonに格納
138
-
139
- var result_json = {
140
-
141
- "shohin_cd": shohin_cd,
142
-
143
- "zaiko_kbn": zaiko_kbn
144
-
145
- };
146
-
147
-
148
-
149
- // 検索結果を格納したjsonをリストに追加
150
-
151
- oya_class.nomal_zaiko_list.push(result_json);
152
-
153
- };
154
-
155
- console.log(oya_class.nomal_zaiko_list);   ←このタイミングではJSONの連想配列になっている
156
-
157
-
158
-
159
- }).fail(function (data) {
160
-
161
- console.log("SearchAPI failed");
162
-
163
- });
164
-
165
-
166
-
167
-
168
-
169
- console.log(oya_class.nomal_zaiko_list);   ←このタイミングでは配列になっておらず要素が取り出せない
170
-
171
- };
172
-
173
-
174
-
175
- // キャンペーン商品を検索する関数
176
-
177
- this.Campaign_Products_Search = function() {
178
-
179
- // products.jsから商品情報を取得
180
-
181
- var campaign_params_list = Campaign_Products_json();
182
-
183
-
184
-
185
- // 商品検索APIに送るパラメータを設定(商品区分はキャンペーン)
186
-
187
- var param_campaign = 'border=20&shohin_kbn=2';
188
-
189
- for (i = 0; i < campaign_params_list.length; i++) {
190
-
191
- param_campaign = param_campaign + '&shohin_cd=' + campaign_params_list[i].shohin_cd;
192
-
193
- }
115
+ }
194
-
195
-
196
-
197
- // 親クラスのインスタンスを生成
198
-
199
- var oya_class = this;
200
-
201
-
202
-
203
- oya_class.product_search_api(param_campaign).done(function (data) {
204
-
205
-
206
-
207
-
208
-
209
- // 検索結果をリストに格納
210
-
211
- for (var i = 0; i < data.length; i++) {
212
-
213
- // 検索結果を変数に格納
214
-
215
- var shohin_cd = data[i].shohin_cd;
216
-
217
- var zaiko_kbn = data[i].zaiko_kbn;
218
116
 
219
117
 
220
118
 
221
- // 検索結果をjsonに格納
119
+ if(product_type_str == 'nomal'){
222
120
 
223
- var result_json = {
121
+ // 検索結果を格納したjsonをリストに追加
224
122
 
225
- "shohin_cd": shohin_cd,
123
+ oya_class.nomal_zaiko_list.push(result_json);
226
124
 
227
- "zaiko_kbn": zaiko_kbn
125
+ }else if(product_type_str == 'campaign'){
228
126
 
229
- };
127
+ // 検索結果を格納したjsonをリストに追加
230
128
 
129
+ oya_class.campaign_zaiko_list.push(result_json);
231
130
 
131
+ }
232
132
 
233
- // 検索結果を格納したjsonをリストに追加
133
+
234
134
 
135
+ }
136
+
235
- oya_class.campaign_zaiko_list.push(result_json);
137
+            console.log(oya_class.campaign_zaiko_list); ← ここは問題ない
236
138
 
237
139
  }
238
140
 
239
-
141
+ })
240
142
 
241
- }).fail(function (jqXHR, textStatus, errorThrown) {
143
+        console.log(oya_class.campaign_zaiko_list); ← ここでリストが空
242
144
 
243
- console.log("SearchAPI failed");
145
+ })
244
146
 
245
- });
246
-
247
- };
248
-
249
-
250
-
251
- // APIを使用して商品を検索し結果を返却する関数
252
-
253
- this.product_search_api = function(param) {
254
-
255
- return $.ajax({
256
-
257
- async: false,
258
-
259
- url: 'http://www.shiseido.co.jp/sw/products/SWFG070740.seam',
260
-
261
- data: param,
262
-
263
- dataType: 'jsonp'
264
-
265
- });
266
-
267
- }
147
+ }
268
-
269
-
270
-
271
- // ギフトセットの在庫状況を判定する関数
272
-
273
- this.Gift_Set_Zaiko_Hantei = function(){
274
-
275
- // ギフトセットのJSONリストを取得
276
-
277
- var gift_set_list = Gift_Set_json();
278
-
279
-
280
-
281
- // 親クラスのインスタンスを生成
282
-
283
- var oya_class = this;
284
-
285
-
286
-
287
- for(var i = 0; i < gift_set_list.length; i++){
288
-
289
-
290
-
291
- // 各商品の判定結果を格納するリストを作成
292
-
293
- var products_hantei_list = [];
294
-
295
-
296
-
297
- for(var j = 0; j < gift_set_list[i].products.length; j++){
298
-
299
- // nomal_zaiko_listから判定対象の商品を抽出
300
-
301
- var nomal_product_json = oya_class.nomal_zaiko_list.filter(function(item, index){
302
-
303
- if (item.shohin_cd == gift_set_list[i].products[j]) return true;
304
-
305
- });
306
-
307
-
308
-
309
- // campaign_zaiko_listから判定対象の商品を抽出
310
-
311
- var campaign_product_json = oya_class.campaign_zaiko_list.filter(function(item, index){
312
-
313
- if (item.shohin_cd == gift_set_list[i].products[j]) return true;
314
-
315
- });
316
-
317
-
318
-
319
- //console.log(oya_class.nomal_zaiko_list.length);
320
-
321
-
322
-
323
- if(nomal_product_json.length == 0){
324
-
325
- // 判定結果を商品ごとの判定リストに格納
326
-
327
- //products_hantei_list.push(campaign_product_json[0].zaiko_kbn);
328
-
329
- }else if(campaign_product_json.length == 0){
330
-
331
- // 判定結果を商品ごとの判定リストに格納
332
-
333
- //products_hantei_list.push(nomal_product_json[0].zaiko_kbn);
334
-
335
- }
336
-
337
-
338
-
339
- }
340
-
341
-
342
-
343
- // 各商品の在庫区分を判定する定数を定義
344
-
345
- const index_0 = products_hantei_list.findIndex(item => item === "0");
346
-
347
- const index_1 = products_hantei_list.findIndex(item => item === "1");
348
-
349
- const index_2 = products_hantei_list.findIndex(item => item === "2");
350
-
351
- const index_9 = products_hantei_list.findIndex(item => item === "9");
352
-
353
-
354
-
355
- // 各商品の在庫状況からセットの在庫状況を判定
356
-
357
- if(index_0 != -1 || index_9 != -1){
358
-
359
- // セットの在庫状況のJSON
360
-
361
- set_zaiko_json = {
362
-
363
- "cate_rank": gift_set_list[i].cate_rank,
364
-
365
- "zaiko_kbn": 0
366
-
367
- }
368
-
369
-
370
-
371
- // 在庫状況のJSONをリストに格納
372
-
373
- gift_set_hantei_list.push(set_zaiko_json);
374
-
375
-
376
-
377
- } else if(index_0 == -1 && index_9 == -1 && index_2 != -1){
378
-
379
- // セットの在庫状況のJSON
380
-
381
- set_zaiko_json = {
382
-
383
- "cate_rank": gift_set_list[i].cate_rank,
384
-
385
- "zaiko_kbn": 2
386
-
387
- }
388
-
389
-
390
-
391
- // 在庫状況のJSONをリストに格納
392
-
393
- gift_set_hantei_list.push(set_zaiko_json);
394
-
395
- } else if(index_0 == -1 && index_9 == -1 && index_2 == -1 && index_1 != -1){
396
-
397
- // セットの在庫状況のJSON
398
-
399
- set_zaiko_json = {
400
-
401
- "cate_rank": gift_set_list[i].cate_rank,
402
-
403
- "zaiko_kbn": 1
404
-
405
- }
406
-
407
-
408
-
409
- // 在庫状況のJSONをリストに格納
410
-
411
- oya_class.gift_set_hantei_list.push(set_zaiko_json);
412
-
413
- }
414
-
415
- }
416
-
417
- }
418
-
419
- }
420
148
 
421
149
 
422
150
 

1

質問内容の明確化

2020/10/29 12:28

投稿

TakeruYamamura
TakeruYamamura

スコア7

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,12 @@
22
22
 
23
23
 
24
24
 
25
+ 上記関数の外でも値を参照して抽出するためにはどのように修正すればよろしいでしょうか。
26
+
27
+ ご教授のほど、よろしくお願いいたします。
28
+
29
+
30
+
25
31
  ### 発生している問題・エラーメッセージ
26
32
 
27
33
  chromeのコンソール上の表示内容です。(console.logで出力させたもの)