前提・実現したいこと
商品の在庫状況を判定する機能をjavascriptで開発しております。
ajaxで在庫検索APIに接続し、取得した結果(JSON)をクラスで定義したメンバ変数(配列)に渡し、クラス内の別の関数で使用したいのですが、うまく動きません。
以下、事象の詳細です。
①クラス内でメンバ変数(配列)を定義
②ajaxでAPIに接続し在庫状況を検索する関数を使用し、在庫状況をメンバ変数に格納
③②の関数の内と外で配列の挙動が異なる ← 問題
上記の②の関数内ではJSONの連想配列として動いてくれるのですが、関数の外では配列にはなっている(chromeのコンソール上にはArrayと表示されている)ものの、要素を指定して値を参照することができない状態となってしまっています。
上記関数の外でも値を参照して抽出するためにはどのように修正すればよろしいでしょうか。
ご教授のほど、よろしくお願いいたします。
発生している問題・エラーメッセージ
chromeのコンソール上の表示内容です。(console.logで出力させたもの)
こっちがだめなやつ [] JSONの連想配列の要素たち length: 37 __proto__: Array(0) ほんとはこっちになってほしい (37) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] JSONの連想配列の要素たち length: 37 __proto__: Array(0)
該当のソースコード
javascript
1this.Search_Product_API = function(param_nomal, product_type_str){ 2 // 親クラスのインスタンスを生成 3 var oya_class = this; 4 5 // APIで通常商品の在庫状況を検索しリストに格納 6 return new Promise(function(resolve, reject){ 7 $.ajax({ 8 url: 'APIのURL', 9 data: param_nomal, 10 dataType: 'jsonp', 11 success: function(data){ 12 // 検索結果をリストに格納 13 for (var i = 0; i < data.length; i++) { 14 // 検索結果を変数に格納 15 var shohin_cd = data[i].shohin_cd; 16 var zaiko_kbn = data[i].zaiko_kbn; 17 18 // 検索結果をjsonに格納 19 var result_json = { 20 "shohin_cd": shohin_cd, 21 "zaiko_kbn": zaiko_kbn 22 } 23 24 if(product_type_str == 'nomal'){ 25 // 検索結果を格納したjsonをリストに追加 26 oya_class.nomal_zaiko_list.push(result_json); 27 }else if(product_type_str == 'campaign'){ 28 // 検索結果を格納したjsonをリストに追加 29 oya_class.campaign_zaiko_list.push(result_json); 30 } 31 32 } 33 console.log(oya_class.campaign_zaiko_list); ← ここは問題ない 34 } 35 }) 36 console.log(oya_class.campaign_zaiko_list); ← ここでリストが空 37 }) 38 } 39 40
試したこと
配列をJSON文字列にパース→JSON型にパースを試しましたが、JSON文字列にパースからできない状態でした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー